@protocol MyProtocol //@required 要求实现,不识闲就会发出警告 默认 //@optional 不要求实现 - (void)test1; @required - (void)test2; - (void)test3; @optional - (void)test4; @end /* 1.协议的定义 @protocol 协议名称 <NSObject> //方法声明列表 @end 2.如何遵守协议 1>类遵守协议 @interface 类名:父类名<协议名称1,协议名称2> @end 2>协议遵守协议 @protocol 协议名称 <其他协议名称1,其他协议名称2> @end 3.协议中方法声明的关键字 1>@required (默认) 要求实现,如果没实现,会发生警告 2>@optional 不要求实现,这样不会有警告 4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议 类名<协议名称> *变量名; id<协议名称> 变量名; NSObject<MyProtocol> *obj; id<MyProtocol> obj2; 如果没有遵守对应的协议,编译器会警告 5.@property中声明的属性也可以用做一个遵守协议的限制 @property (nonatomic,strong) 类名<协议名称> *属性名; @property (nonatomic,strong) id<协议名称> 属性名; 6.协议可用定义在单独.h文件中,也可用定义在某个类中 1>如果这个协议之用在某个类中,应该把协议定义在该类中 2>如果这个协议用在很多类中,就应该定义在单独文件中 7.分类可用定义在单独.h和.m文件中,也可用定义在原来类中 1>一般情况下,都定义在单独文件 2>定义在原来类中的分类,只要求能看懂语法 */