#import <UIKit/UIKit.h>
@protocol myProtocol <NSObject>
-(void)aMethod;
@end
@interface ViewController : UIViewController
@property (weak) id<myProtocol> dSource;
@end
我试图牢牢掌握 Obj-c 协议,我正在阅读苹果文档来学习,我不清楚。以下是doc的要点:
饼图视图类接口需要一个属性来跟踪数据源对象。(上面的代码,我们大多是这样声明协议的,当我在我的类中声明协议时为什么需要一个跟踪对象,或者协议可以在独立的类中定义?为此我们需要跟踪对象?)
通过在属性上指定所需的协议一致性,如果您尝试将属性设置为不符合协议的对象,则会收到编译器警告。
如果您尝试在符合上面定义的协议的 id 上调用 respondsToSelector: 方法,您将收到一个编译器错误,即没有已知的实例方法。一旦你用协议限定了一个 id,所有的静态类型检查都会回来;如果您尝试调用未在指定协议中定义的任何方法,您将收到错误消息。避免编译器错误的一种方法是将自定义协议设置为采用 NSObject 协议。