与Extension

iOS categoryde用法以及extension的区别

不问归期 提交于 2020-02-28 20:01:48
OS中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