1. 程式人生 > >iOS總結-Runtime篇之用途及面試題的總結之Associated Object關聯物件

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