categoryde用法以及extension的不相同

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

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

一.category 

一.category

品种是一种为依存的类添加新点子的不二法门。

品类是一种为依存的类添加新办法的办法。

应用Objective-C的动态运转时分配机制,Category提供了一种比持续(inheritance)更为简单的不二法门来对class举办增加,无需制造对象类的子类就能为依存的类添加新方式,可以为任何已经存在的class添加方法,包含那个没有源代码的类(如有些框架类)。

接纳Objective-C的动态运行时分配机制,Category提供了一种比持续(inheritance)更为精简的方法来对class进行增加,无需创立对象类的子类就能为依存的类添加新章程,可以为其余已经存在的class添加方法,包蕴这个尚未源代码的类(如有些框架类)。

1.类其他局限:(1)不可以向品种中添加新的实例变量,序列没有位置容纳实例变量。假若一定要添加实例变量,可以动用runtime
库objc_setAssociatedObject / objc_getAssociatedObject
函数来缓解。objc_setAssociatedObject
就是将二个目标跟另一个目的开展关联,并用一个key来标示,objc_getAssociatedObject
就是用那些key来得到与receiver相关联的三个对象。

1.类其余局限:(1)无法向品种中添加新的实例变量,连串没有地点容纳实例变量。即便一定要添加实例变量,可以使用runtime
库objc_setAssociatedObject / objc_getAssociatedObject
函数来缓解。objc_setAssociatedObject
就是将2个目标跟另1个对象举办关联,并用三个key来标示,objc_getAssociatedObject
就是用那些key来拿到与receiver相关联的三个目的。

瞩目:必须选取@dynamic来让编译器知道我们友好达成setter/getter方法(假使对于@dynamic有失水准,请参见:http://stackoverflow.com/questions/1160498/synthesize-vs-dynamic-what-are-the-differences)

小心:必须使用@dynamic来让编译器知道我们休戚相关完成setter/getter方法(借使对于@dynamic有毛病,请参见:http://stackoverflow.com/questions/1160498/synthesize-vs-dynamic-what-are-the-differences)

         不可以动用@synthesize(也不可能@dynamic
和@synthesize都不写,什么都不写在最新的xcode里是暗中同意@synthesize),@synthesize会自动生成成员变量,并自动生成setter/getter方法。

不可以运用@synthesize(也不可以@dynamic
和@synthesize都不写,什么都不写在新式的xcode里是私自认同@synthesize),@synthesize会自动生成成员变量,并自动生成setter/getter方法。

         最后,objc_setAssociatedObject 的关系的policy
可以依照自个儿的急需使用,这么些事例使用
OBJC_ASSOCIATION_RETAIN_NONATOMIC来标示三个strong
reference来指向被提到的目标。

最后,objc_setAssociatedObject 的关系的policy
可以依据本人的急需使用,这些例子使用
OBJC_ASSOCIATION_RETAIN_NONATOMIC来标示2个strong
reference来指向被波及的靶子。

(2)名称争辩,即当系列中的方法名与原始类中的名称一致的时候,体系享有更高的先行级。类其他方法将完全代表原来方法而一筹莫展再接纳原有方法。

(2)名称争辩,即当连串中的方法名与原始类中的名称一致的时候,体系享有更高的先行级。类其他不二法门将完全代表原来方法而望洋兴叹再采纳原来方法。

2.类其他功用

2.类其余成效

类型的功用重点有四个:

品种的职能重大有八个:

(1)可以将类的兑现分流到多少个分裂的文本或许不一致的框架中,方便代码的军事管制。也足以对框架提供类的增加(没有源码,不可以改改)。

(1)可以将类的兑现分散到多少个不一致的文本恐怕差其余框架中,方便代码的管理。也足以对框架提供类的增添(没有源码,不可以改改)。

 (2)创设对私家方法的前向引用:尽管别的类中的方法未兑现,在你拜访其他类的村办方法时编译器报错这时使用项目,在品种中扬言这一个艺术(不必提供形式完成),编译器就不会再发生警告

(2)创制对私有方法的前向引用:若是别的类中的方法未落实,在您拜访其余类的私家方法时编译器报错那时使用项目,在项目中申明这一个办法(不必提供形式落成),编译器就不会再发生警告

 (3)向目标添加非正式协议:创设三个NSObject的种类称为“创立四个业余磋商”,因为可以看成其余类的寄托对象使用。

(3)向目的添加非正式协议:成立一个NSObject的档次称为“创制多个非正式磋商”,因为能够作为其余类的信托对象使用。

二.Extension 的使用

二.Extension 的使用

 
 首先如故需求成立相关类的壮大,即方法的宣示,然后在急需伸张的类中引入头文件,然后落成表明的点子。

首先依旧必要创设相关类的壮大,即方法的扬言,然后在必要扩张的类中引入头文件,然后完结注脚的不二法门。

三.Category 与Extension 的区别

三.Category 与Extension 的区别

1.花样上看:extension 是匿名的category

1.试样上看:extension 是匿名的category

2.extension中宣示的章程要求在mainimplementation中落到实处,而category
不做强制需求

2.extension中宣称的格局需求在mainimplementation中落实,而category
不做强制要求

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

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