本文共 937 字,大约阅读时间需要 3 分钟。
在苹果的规定中分类(Category)中是不可以添加自定义属性的,
why?
- 1.分类为什么不能拓展成员变量?
- 使用alloc初始化的时候,一些系统自定义的类型都有固定的大小,因为他们都有系统定义的固有的成员变量,init就是为这些成员变量赋值
- 如果,我们在分类中拓展成员变量,那么使用alloc开辟空间的时候,就无法检测到自定义的成员变量,所以使用init开辟空间的时候就无法准确的开辟空间,所以苹果的设计中不允许在分类中扩展成员变量
凡事都有个例外………
通过运行时机制
可以实现在分类中添加自定义属性
NSObject+LC.h@interface NSObject (LC)@property (nonatomic,strong) id associatedObject;@end
NSObject+LC.m#import/* 1.运行时,是开发OC的;OC是在运行时的C语言的API的基础之上的封装 2.可以动态的给对象增加属性 : 字典转模型框架 3.可以动态的交换方法的地址 : 可以交换自定义的方法和系统的方法的地址 4.可以动态的获取对象的属性 : 字典转模型框架 5.可以动态的给某个分类关联上它的属性 6.可以动态的给对象的私有的成员变量赋值 7.只在开发大型框架时使用的,平时开发用不到的 */@implementation NSObject (LC)@dynamic LC; /* 参数1 : 关联的对象 参数2 : 关联的key 参数3 : 关联的value 参数4 : 关联的value的存储策略 */-(void)setAssociatedObject: (id) object {objc_setAssociatedObject ( self, @selector (associatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC );}-(id)associatedObject{return objc_getAssociatedObject( self, @selector ( associatedObject ) );
转载地址:http://xfkii.baihongyu.com/