博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【OC】类的延展Extendsion
阅读量:4087 次
发布时间:2019-05-25

本文共 1417 字,大约阅读时间需要 4 分钟。

延展类别又称为扩展(Extendsion)

ExtensionCategory的一个特例其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

@interface MyClass () { //类扩展 float value;}- (void)setValue:(float)newValue;@end

这种写法的类别叫匿名类别,又叫类扩展,所谓的扩展,其实就是为一个类添加额外的原来没有的变量、方法或者合成属性。

延展的三种实现方式:

方式一:

通过延展来实现方法的私有,延展的头文件独立。这种方法不能实现真正的方法私有,当在别的文件中引入延展的头文件,那么在这个文件中定义的类的对象就可以直接调用在延展中定义所谓私有的方法

// 对类的延展 - 隐藏方法 wrap的一种手段(非强制) .h文件@interface SceneManager ()+ (void) wrap;@end.m类的实现文件中 @implementation SceneManager + (void) wrap {NSLog(@"method of wrap"); }@end
调用[SceneManager wrap];// 这里会抱一个警告:Class method of "+ wrap" not found// 不过虽然是警告,不过运行是正常的,不过这么写在自我规范上不好,即使编译器没有做强制 限制,我们自己也要限制自己。// 不然,延展方法就毫无意义可言。

方式二:

第二种实现延展的方式是延展没有独立的头文件,在类的实现文件.m中声明和实现延展,这种方法可以很好的实现方法的私有,因为在OC中是不能引入.m的文件的

.m文件@interface SceneManager ()+ (void) wrap;@end@implementation SceneManager + (void) wrap {NSLog(@"method of wrap"); }@end调用[SceneManager wrap];

方式三:

第三种实现方法私有的方式是在.m文件中得@implementation中直接实现在@interface中没有声明的方法,这样也可以很好的实现方法的私有。

分类(Category与类扩展(Extendsion)的区别:

Category有很多种翻译: 分类 \ 类别 \ 类目 (一般叫分类)

1.分类(Category中只能增加方法

2.类扩展(Extendsion不仅可以增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是私有类型的(作用范围只能在自身类,而不是子类或其他地方)

3.类扩展(Extendsion中声明的方法没被实现,编译器会报警,但是分类(Category中的方法没被实现编译器是不会有任何警告的。这是因为类扩展(Extendsion是在编译阶段被添加到类中,而分类(Category是在运行时添加到类中

4.类扩展(Extendsion不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现(.m文件)部分来实现。

5.义在 .m 文件中的类扩展方法为私有的,定义在 .h 文件(头文件)中的类扩展方法为公有的。类扩展是在 .m 文件中声明私有方法的非常好的方式。

转载地址:http://uykii.baihongyu.com/

你可能感兴趣的文章
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
在mc中直接加aswing组件,该组件还需最后用validate()方法
查看>>
移植Vim配色方案到Eclipse
查看>>
从超链接调用ActionScript
查看>>
谈谈加密和混淆吧[转]
查看>>
TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
查看>>
网络游戏客户端的日志输出
查看>>
关于按钮的mouseOver和rollOver
查看>>
Netty框架
查看>>
Socket经验记录
查看>>
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
FMS 客户端带宽计算、带宽限制
查看>>
在线视频聊天(客服)系统开发那点事儿
查看>>
SecurityError Error 2148 SWF 不能访问本地资源
查看>>
Flex:自定义滚动条样式/隐藏上下箭头
查看>>
烈焰SWF解密
查看>>