澳门新葡亰官网iOS categoryde用法以及extension的分别

澳门新葡亰官网iOS categoryde用法以及extension的分别

iOS中category即:类别 ;extension 为扩张

一.category 

列是同样种为依存的好像添加新方式的方式。

动用Objective-C的动态运行时分配机制,Category提供了一样种比较持续(inheritance)更为精简之法门来对class进行扩展,无需创建对象类的子类就会也现有的近乎添加新措施,可以啊外已经存在的class添加方法,包括那些尚未源代码的类(如一些框架好像)。

1.类别的局限:(1)无法往品种中上加新的实例变量,类别没有位置容纳实例变量。如果一定要上加实例变量,可以运用runtime
库objc_setAssociatedObject / objc_getAssociatedObject
函数来缓解。objc_setAssociatedObject
就是拿一个目标以及任何一个目标开展关联,并因而一个key来标示,objc_getAssociatedObject
就之所以之key来拿到与receiver相关联的一个靶。

小心:必须用@dynamic来叫编译器知道我们友好实现setter/getter方法(如果对@dynamic有问号,请参见:http://stackoverflow.com/questions/1160498/synthesize-vs-dynamic-what-are-the-differences)

         不可知采取@synthesize(也非能够@dynamic
和@synthesize都无写,什么都未写于新型的xcode里是默认@synthesize),@synthesize会自动生成成员变量,并自动生成setter/getter方法。

         最后,objc_setAssociatedObject 的干的policy
可以依据自己之急需下,这个例子使用
OBJC_ASSOCIATION_RETAIN_NONATOMIC来标示一个strong
reference来指向于提到的目标。

(2)名称冲突,即当型中之措施名与原始类中的称号相同的时刻,类别享有双重胜之事先级。类别的方式以完全代替原来方法而无法再使原来方法。

2.类别的作用

型的来意至关重要出三单:

(1)可以拿看似的贯彻分流到几近个不同之公文或者不同的框架中,方便代码的管理。也可本着框架提供类似的扩充(没有源码,不克改)。

 (2)创建对民用方法的面前于引用:如果另外类中的方法不实现,在你拜其他类的个体方法时编译器报错这时用项目,在品种中扬言这些措施(不必提供方式实现),编译器就不见面又发警告

 (3)向目标上加非正式协议:创建一个NSObject的品类称为“创建一个非正式磋商”,因为好看成其他类似的委托对象下。

二.Extension 的使用

 
 首先还是用创造相关类的扩大,即方法的扬言,然后以急需扩大的接近吃引入头文件,然后实现声明的法子。

三.Category 与Extension 的区别

1.款式达到看:extension 是匿名的category

2.extension面临扬言的主意要以mainimplementation中贯彻,而category
不做强制要求

3.extension 得以上加属性、成员变量,而category 一般不可以。

admin

网站地图xml地图