2013-02-06 129 views
1
#import <UIKit/UIKit.h> 

@protocol myProtocol <NSObject> 

-(void)aMethod; 

@end 

@interface ViewController : UIViewController 

@property (weak) id<myProtocol> dSource; 

@end 

我想要牢牢抓住Obj-c协议,我正在读苹果doc去学习,很少有东西不清楚。以下是在点从DOC:需要协助理解objective-c协议

  1. 饼图视图类接口将需要一个属性来跟踪数据源对象的。 (上面的代码中,我们主要是申报协议这种方式,当我有协议,在我的类中声明为什么需要追踪被摄体,或协议可以在独立的类中定义?为此,我们需要跟踪对象?)

  2. 通过在属性上指定所需的协议一致性,如果您尝试将属性设置为不符合协议的对象,则会收到编译器警告。

  3. 如果您尝试调用上面定义的符合协议的id的respondsToSelector:方法,则会出现编译器错误,表明没有已知的实例方法。一旦你使用协议限定了一个id,所有的静态类型检查都会回来;如果您尝试调用未在指定协议中定义的任何方法,则会出现错误。避免编译器错误的一种方法是将自定义协议设置为采用NSObject协议。

回答

1
  1. 我不明白这个问题
  2. 正确,物业要求物业是 符合你的财产,如果你尝试将它设置为别的一个id 编译器正确地抱怨
  3. 这是因为respondsToSelector:是对NSObject 协议的方法,让你可以有你的协议延长NSObject (标准),或者你可以申报财产为 NSObject
+0

感谢您的回复,在第1点我要求的主要是协议的编写方式就像在代码片段,所以当协议在我的课为什么要声明一个跟踪对象? –

+0

它可以让你在课堂之外移动这个功能。例如。 UITableViewDatasource在UITableView头文件中声明,但在那里声明,所以你不必为了自定义它的功能而继承UITableView。 – wattson12

+0

意思是我可以将协议声明为一个独立的头文件并使用跟踪对象。 –