2010-09-11 60 views

回答

5

功能,是的。但是在形式上,没有。

问题是,Objective-C 2.0之前的协议没有可选方法的概念。因此,使用名为informal protocol的东西来代替。基本上,头文件只是增加了一个类别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 

因此,正如您在documentation for NSApplicationDelegate中发现的那样,该协议在10.6中形式化,但在此之前没有。但是,自10.0版起,该功能一直存在。

Cocoa世界变化很快,文档只会描述最新版本,所以如果可能的话,我建议您升级到10.6。这将为您节省数小时的头发刮擦,特别是如果你是初学者。

相关问题