Category和Extension
2016-05-10 15:26
225 查看
Extension和category
Category(类别):
Category在iOS开发中使用非常频繁,尤其是在为系统类进行拓展时,可以不用继承系统类,直接给系统类添加 方法,最大程度的体现了OC的动态语言特性。
通常的命名方式是:Category扩展的类名+Category name;
局限性:
1、无法向类中添加新的实例变量,类别没有位置容纳实例变量;
2、名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级,类别方法将完全取代初始方法。
类别的作用:
1、扩展一个其他实施者定义的类,可以为某个类增加方法,增加的方法会被子类继承,而且在运行时也不会和原始的方法有任何不同;
2、作为子类的一个替代方法,不需要定义一个子类来扩展已有的类,通过Category可以直接为类添加方法;
3、把实现一个新类的方法分布在多个源文件里,可以把一个很大的类的方法分组到几个Category里,然后把每个Category放在自己的文件里,Category在很多方面对开发过程都是有帮助的:
①提供一个简单地方式组合相关的方法。被定义在不同的类里的相似的方法可以被保存在同一个源文件里;
②当一个类是由多个开发者共同定义的时候,可以简化大类的管理;
③为一个非常大的类的增量编译提供方便;
④提高常用方法的本地参考;
⑤可以根据不同版本的程序配置不同的类,而无需为不同版本保持相同的源代码;
4、可以用来声明非正式协议;
注意:
1、Category的方法不一定非要在implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序会崩溃。
2、Category理论上不能添加变量,但是可以使用@dynamic来弥补这种不足。
Extension(扩展):
1、常被称为是匿名的Category
2、用于给类添加新方法,但只作用于原始类,不作用于subclass
3、只能对有implementation源代码的类写Extension,对于没有implementation源代码的类,比如framework class,是不可以的
4、可以给原始类添加新方法,以及新属性
区别:
1、形式上来看,Extension是匿名的Category
2、Extension里声明的方法需要在mainimplementation中实现,Category不强制要求
3、Extension可以添加属性(变量),Category不可以
Category(类别):
Category在iOS开发中使用非常频繁,尤其是在为系统类进行拓展时,可以不用继承系统类,直接给系统类添加 方法,最大程度的体现了OC的动态语言特性。
通常的命名方式是:Category扩展的类名+Category name;
局限性:
1、无法向类中添加新的实例变量,类别没有位置容纳实例变量;
2、名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级,类别方法将完全取代初始方法。
类别的作用:
1、扩展一个其他实施者定义的类,可以为某个类增加方法,增加的方法会被子类继承,而且在运行时也不会和原始的方法有任何不同;
2、作为子类的一个替代方法,不需要定义一个子类来扩展已有的类,通过Category可以直接为类添加方法;
3、把实现一个新类的方法分布在多个源文件里,可以把一个很大的类的方法分组到几个Category里,然后把每个Category放在自己的文件里,Category在很多方面对开发过程都是有帮助的:
①提供一个简单地方式组合相关的方法。被定义在不同的类里的相似的方法可以被保存在同一个源文件里;
②当一个类是由多个开发者共同定义的时候,可以简化大类的管理;
③为一个非常大的类的增量编译提供方便;
④提高常用方法的本地参考;
⑤可以根据不同版本的程序配置不同的类,而无需为不同版本保持相同的源代码;
4、可以用来声明非正式协议;
注意:
1、Category的方法不一定非要在implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序会崩溃。
2、Category理论上不能添加变量,但是可以使用@dynamic来弥补这种不足。
Extension(扩展):
1、常被称为是匿名的Category
2、用于给类添加新方法,但只作用于原始类,不作用于subclass
3、只能对有implementation源代码的类写Extension,对于没有implementation源代码的类,比如framework class,是不可以的
4、可以给原始类添加新方法,以及新属性
区别:
1、形式上来看,Extension是匿名的Category
2、Extension里声明的方法需要在mainimplementation中实现,Category不强制要求
3、Extension可以添加属性(变量),Category不可以
相关文章推荐
- Google APAC Test 2016 Not So Random 矩阵快递幂(logN复杂度)
- Django模型层Meta内部类详解
- Django urls配置
- Google深度学习笔记 Logistic Classification
- 《Go语言编程入门》视频课程开课了
- Google map api 初学
- 为韩春雨老师和他的 NgAgo-gDNA 点赞
- 为韩春雨老师和他的 NgAgo-gDNA 点赞
- 换新LOGO,58集团想从分类信息向生活服务巨头蜕变?
- 【bzoj1419】Red is good 期望dp
- django中的权限控制(form增删改)
- poj 2262 Goldbach's Conjecture -- 筛法求素数打表
- Django(一)多对一模型
- Django:URL-patterns的高级使用方式与URL传递参数
- Create a Virtual Reality Game For Google Cardboard
- golang学习第二篇 开发环境的搭建
- Golang测试技术
- 龙书(Dragon book) +鲸书(Whale book)+虎书(Tiger book)
- 【转】十条有用的 Go 技术
- Go语言学习(十三)面向对象编程-继承