Функционально да. Но формально нет.
Дело в том, что протоколы до Objective-C 2.0 не имели концепции дополнительных методов. Поэтому вместо этого использовалось то, что называется неофициальный протокол . По сути, заголовочные файлы просто добавили категорию к NSObject
, как в
@interface NSObject (NSApplicationDelegate)
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
....
@end
Таким образом, компилятор не будет предупреждать вас, когда вы вызываете метод делегата для произвольного объекта. Теперь он оформлен как официальный протокол:
@protocol NSApplicationDelegate
@optional
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
....
@end
При реализации делегата приложения разница будет в 10,5 и до того, как вы получите
@interface YourAppDelegate:NSObject {
...
}
@end
пока у вас будет в 10,6 и позже
@interface YourAppDelegate:NSObject<NSApplicationDelegate> {
...
}
@end
Итак, как вы найдете в документации для NSApplicationDelegate
, протокол формализован в 10.6, но не раньше. Тем не менее, функциональность была там с 10.0.
Мир какао меняется довольно быстро, и в документации описывается только самая последняя версия, поэтому я бы порекомендовал вам обновить ее до 10.6, если это возможно. Это сэкономит вам массу часов на расчесывание волос, особенно если вы новичок.