我下载了一个名为adium的应用程序的源代码,因为我想通过仔细检查其他人的代码来更好地学习cocoa,但是在这个界面中有一些让我很困惑的事情:
@interface AIAdium : NSObject <AIAdium, SUVersionComparison> {
@private
IBOutlet NSObject <AIMenuController> *menuController;
IBOutlet NSObject <AIInterfaceController> *interfaceController;
IBOutlet SUUpdater *updater;
NSObject <AIAccountController> *accountController;
NSObject <AIChatController> *chatController;
NSObject <AIContactController> *contactController;
NSObject <AIContentController> *contentController;...
它继续这样下去。我不明白的是NSObject如何符合像AIAccountController这样的协议。我认为你必须实现协议接口中定义的方法以符合它,但是NSObject怎么能这样做呢?
答案 0 :(得分:3)
这不是那些线的意思。例如:
NSObject <AIAccountController> *accountController;
这意味着accountController
ivar是指向符合NSObject
协议的任何AIAccountController
派生类的指针。
由于NSObject
是大多数其他类的根类,这基本上意味着任何符合协议的自定义类都可以分配给ivar。
关于该行的任何内容都与NSObject
本身无关。
此代码的作者应该使用的是:
id<AIAccountController> accountController;