第十五篇:OC中 分类,关键字protocol 协议的声明与应用,ocprotocol
第十五篇:OC中 分类,关键字protocol 协议的声明与应用,ocprotocol
1. 协议的定义:
》协议就是用来声明一大堆方法的。
@protocol 协议名称 <NSObject>
// 方法声明列表..........
@end
2. 如何遵守协议 :
》类遵守协议,本类就会拥有它遵守的协议所有的方法:
@interface 类名 : 父类名 <协议名称1 ,协议名称2 , .... >
............. // 类的声明
@end
》协议遵守协议,本协议就会拥有其他协议所有的方法:
@protocol 协议名称 <其他协议名称1 , 其他协议名称2,.....>
// 本协议的方法声明,
@end
3. 协议中方法声明的关键字:
》@required (默认) ,要求实现,如果没有实现,会发出警告。
例如,在协议体中: @required
- (void) text() ;
》@optional ,不要求实现,不管在遵守该协议的类中实不实现,都不会发出警告。
4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议:
》形式:类名<协议名称> * 变量名;
id <协议名称> 变量名;
》例如:NSObject<MyProtocol> * obj ;
id <MyProtocol> obj2 ;
注意:如果指向的对象没有遵守对应的协议,编译器会有警告:等式右边的对象会有一个黄色的下划线。
5. @property 中声明的属性也可以用做一个遵守协议的限制:
》形式: @property (nonatomic , strong) 类名<协议名称> * 成员变量名;
@property (nonatomic , strong) id<协议名称> * 成员变量名;
》例如:@property (nonatomic , strong) Person<MyProtocol> * person;
@property (nonatomic , strong) id<MyProtocol> * person2;
6.协议可以在单独 .h 文件中,也可以在某个类中:
》如果这个协议只用在某个类中,应该把协议定义在该类中;
》如果这个协议用在很多类中,就应该定义在单独文件中。
7.分类可用定义在单独 .h 和 .m 文件中,也可以定义在原来类中:
》分类声明形式的例子:@interface Person (other)
......... // 声明体
@end
》一般情况下,都是定义在单独文件中;
》定义在原来类中的分类,只要看懂即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。
用户评论