/**
* 分类中不能定义成员变量,不能直接定义属性
* 如果定义了属性,必须自己重写getter&setter方法
*
如果分类中,能够实现纪录属性功能.
需要用到'运行时机制',是开发OC语言的!
在日常开发中用到三个场景
1.在分类中,通过关联对象,给分类动态添加属性,能够让分类解耦,开发框件。
2.动态获得一个类的属性列表,可以开发字典模型转模型的框架。
3.交换方法,动态交换方法的地址,用处主要用在接管系统方法。
*
*
*/
/**
* 动态关联属性
1.关联到的对象
2.属性的key const void *key 定义一个常量 (语法相当于id)
3.纪录属性的值
4.关联的引用
OBJC_ASSOCIATION_ASSIGN ARC中的assign
OBJC_ASSOCIATION_COPY ARC中的COPY
OBJC_ASSOCIATION_COPY_NONATOMIC ARC中的线程保护问题
OBJC_ASSOCIATION_RETAIN
OBJC_ASSOCIATION_RETAIN_NONATOMIC ARC中的Strong
weak 和 assgin区别
相同点:
都不会强引用。
不同点:
weak引用的对象,一旦引用计数为0,会自动指向nil
assign引用的对象,一旦引用计数为0,对象地址不变,因此MRC下,会出现野指针的问题。也是常见bug
objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)
* 分类中不能定义成员变量,不能直接定义属性
* 如果定义了属性,必须自己重写getter&setter方法
*
如果分类中,能够实现纪录属性功能.
需要用到'运行时机制',是开发OC语言的!
在日常开发中用到三个场景
1.在分类中,通过关联对象,给分类动态添加属性,能够让分类解耦,开发框件。
2.动态获得一个类的属性列表,可以开发字典模型转模型的框架。
3.交换方法,动态交换方法的地址,用处主要用在接管系统方法。
*
*
*/
/**
* 动态关联属性
1.关联到的对象
2.属性的key const void *key 定义一个常量 (语法相当于id)
3.纪录属性的值
4.关联的引用
OBJC_ASSOCIATION_ASSIGN ARC中的assign
OBJC_ASSOCIATION_COPY ARC中的COPY
OBJC_ASSOCIATION_COPY_NONATOMIC ARC中的线程保护问题
OBJC_ASSOCIATION_RETAIN
OBJC_ASSOCIATION_RETAIN_NONATOMIC ARC中的Strong
weak 和 assgin区别
相同点:
都不会强引用。
不同点:
weak引用的对象,一旦引用计数为0,会自动指向nil
assign引用的对象,一旦引用计数为0,对象地址不变,因此MRC下,会出现野指针的问题。也是常见bug
objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)