OC中的类别Category-协议Protocol-扩展Extension

OC中的类别Category-协议Protocol-扩展Extension

ID:46612750

大小:72.50 KB

页数:4页

时间:2019-11-26

OC中的类别Category-协议Protocol-扩展Extension_第1页
OC中的类别Category-协议Protocol-扩展Extension_第2页
OC中的类别Category-协议Protocol-扩展Extension_第3页
OC中的类别Category-协议Protocol-扩展Extension_第4页
资源描述:

《OC中的类别Category-协议Protocol-扩展Extension》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、OC中的类别Category-协议Protocol-扩展Extension类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件小。通常只在类别屮定义方法。类别,接口部分的定义,通常该文件命名为已有”类+类别名.h”@interface已有类(类别名)〃・……方法实现@end#import#import"Buy.h"@interfacePerson:NSObject-(void)eat;

2、@end实现如下:#importnPerson.h"©implementationPerson-(void)buy//实现协议方法{NSLog(@nBuysomething…ProtocolMethod");}〃这是一个公有方法,因为在・h有声明,第三方也可以用。-(void)eat{NSLog(@nrmeating-PersonClass1');}〃这是一个私有方法。因为只在・m文件屮定义,而没有在・h文件屮声明-(void)playFootballNSLog(@nBobplayingfootball—Pri

3、vateMethod");@end例如,考虑为Person增加一个类别,则接口部分代码如下#import©interfacePerson(OtherMethod)-(void)sleep;@end该类别的实现部分如K#importnPerson+OtherMethod.hn©implementationPerson(OtherMethod)-(void)sleep{NSLog(@"I'msleeping—Category");}@end所有Person类的实例就

4、都会具有sleep方法,从而实现对Person类的动态扩展。我们知道,如果一个函数在・h文件屮无声明而在m文件屮定义它的实现,那么该方法就是私有方法,只能在本类的文件小使用。若我们在类别的接口部分声明这个方法,那么我们就可以实现对该私有方法的访问。扩展(extension)扩展与类别和似,扩展和当于匿名类别,即没有类别名的类别类别,接口部分的定义,通常该文件命名为已有啖_xxx.h”@interface已有类()//.……方法实现@end在用法上,类别通常都都有单独的.h和.m文件。扩展则是临时的对某个类进行扩

5、展,类的实现部分同时实现类接II部分定义的方法和扩展中定义的方法。定义类的扩展时,可以增加额外的实例变量,也可使用@property和@synthesize关键字,但在定义类的额外列表吋不允许额外定义实例变量。有类名为Vehicle,只有name屈性没有定义方法。对其进行扩展^import"vehicle.h"@interfaceVehicle()@property(nonatomic,strong)NSString*color;-(void)drive:(NSString*)name;@end为原來的Vehi

6、cle类增加color属性和drive:方法,因此在Vehicle.m实现文件里面要实现Vehicle.h里声明的方法及这个drive:方法。//“Vehicl匕m”^import"Vehicle_ext.h〃©implementationVehicle-(void)drive:(NSString*)name{NSLog(@”交通工具名称%@,颜色属性%@'_name,_color);}@end在实际使用屮,通用的做法是省略掉Vehicle_ext.h文件,而是将其屮的内容直接添加在Vehicle.m文件@i

7、mplementation前部即可。协议(protocol)以NSObject为基础,为NSOject创建类别,创建类别时指定该类新增的方法,既可以实现非正式协议。而0C中对于实现非止式协议的类而言,0C并不强制实现该协议中的所自方法。止式协议使用@protocol关键字定义@protocol协议名v父协议1,父协议2>{//••…方法声明}@end协议是支持多继承的。在OC2.0标准中新增]"@Tcquired@optional两个关键字,声明方式是必须是必须实现述是可选的,默认为@required.遵守协

8、议的语法如下©interface类名:父类型v协议1,协议2.・>使用协议來定义变量,那么这些变量只能调用该协议中声明的方法,否则编译器会提示错误。使用协议來定义变量的两种语法NSObject<协议1,协议2.〉*变量名;idv协议1,协议2…〉变量;协议体现的是一种规范,定义协议的类可以把协议定义的方法委托(delegate)给实现协议的类,这样可以让类具有更好的通用性,具体的动作交

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。