2011-01-07 7 views
1

Допустим, у меня есть класс, который ClassA объявляющий протокол в ClassA.h:Использование делегата декларации в нескольких классах

@protocol SomeProtocol 

- (void)myMethod; 

@end 

Теперь, скажем, у меня есть класс ClassB. Я действительно хотел бы использовать SomeProtocol в ClassB так:

#import ClassA.h 

@interface ClassB : NSObject 
{ 
    id <SomeProtocol> someObject; 
} 

но компилятор продолжает говорить мне, что «Не удается найти объявление протокола для„SomeProtocol“

Любые идеи, что я пропускаю.?

ответ

3

Изменить ClassB выглядеть следующим образом:

@protocol SomeProtocol; 

@interface ClassB : NSObject 
{ 
    id <SomeProtocol> someObject; 
} 

Просто для уточнения, используя директиву @protocol, как это только я n формирует компилятор, который SomeProtocol является протоколом, который будет определен позже. Это просто делает прямую ссылку на протокол, не требуя импорта интерфейса, где он определен.

Более подробную информацию можно найти здесь (очень внизу): http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProtocols.html

2

Вы также можете поместить протокол в SomeProtocol.h (его собственный заголовочный файл) и импортировать его как из класса А и класса В.

Если вы не импортируете протокол, вы не получите приятных предупреждений о времени компиляции, сообщающих вам, когда вы совершаете ошибку, называя это ...