需要帮助理解objective-c协议

时间:2013-02-06 11:56:43

标签: objective-c protocols

#import <UIKit/UIKit.h>

@protocol myProtocol <NSObject>

-(void)aMethod;

@end

@interface ViewController : UIViewController

@property (weak) id<myProtocol> dSource;

@end

我正试图牢牢掌握Obj-c协议,我正在阅读苹果doc进行研究,很少有事情我不清楚。以下是doc的要点:

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

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

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

1 个答案:

答案 0 :(得分:1)

  1. 我不明白这个问题
  2. 正确,该属性要求该属性是一个id 如果您尝试将其设置为其他内容,则符合您的属性 编译器正确地抱怨
  3. 这是因为respondsToSelector:是NSObject上的方法 协议,所以你可以让你的协议扩展NSObject (标准),或者您可以将该财产声明为 NSObject的