iOS总结-Runtime篇之用途及面试题的总结之Associated Object关联对象

Associated Object关联对象也是runtime应用里面的一种.

由于category_t的结构体里面没有objc_ivar_list,所以无法添加成员变量,可以通过@property来添加属性,但是

分类中@property生成属性,并不能自动生成setter/getter方法,需要我们@dynamic方法,或者手动生成setter/getter方法.

简单总结关联对象实现原理:

关联对象其实就是ObjcAssociation对象

关联对象由AssociationManager管理并在AssociationsHashMap存储,通过spinlock_t来保证线程安全

AssociationsHashMap里面存储了ObjcAssociationMap的指针地址

ObjcAssociationMap存储了const void * _Nonnull key值, value就是ObjcAssociation对象

ObjcAssociation对象存了id _Nullable value/(associatedObject), objc_AssociationPolicy policy/(OBJC_ASSOCIATION_RETAIN_NONATOMIC)

参考:https://www.jianshu.com/p/79479a09a8c0

猜你喜欢

转载自blog.csdn.net/qq_28551705/article/details/83186394