与一些客观的协议混淆

时间:2014-06-13 00:41:29

标签: objective-c protocols nsobject

我下载了一个名为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怎么能这样做呢?

1 个答案:

答案 0 :(得分:3)

这不是那些线的意思。例如:

NSObject <AIAccountController> *accountController;

这意味着accountController ivar是指向符合NSObject协议的任何AIAccountController派生类的指针。

由于NSObject是大多数其他类的根类,这基本上意味着任何符合协议的自定义类都可以分配给ivar。

关于该行的任何内容都与NSObject本身无关。

此代码的作者应该使用的是:

id<AIAccountController> accountController;