第十五篇:OC中 分类,关键字protocol 协议的声明与应用

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) //对于Person这个类进行扩充功能

                                                 ......... // 声明体

                                              @end

》写分类的注意点:

(1)分类中不能定义成员变量,分类中可以调用被扩充的类中的私有成员变量(不能是编译器生成的,即用@property生成的)

(2)分类中如果声明和实现了和被扩充类中的方法一样,那么被扩充类中的同名方法会被覆盖。

(3)调用分类中的方法:创建一个被扩充类的对象p,用p对象直接调用分类中的方法。

》一般情况下,都是定义在单独文件中;

》定义在原来类中的分类,只要看懂即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值