iOS總結-Runtime篇之用途及面試題的總結之Associated Object關聯物件
阿新 • • 發佈:2018-11-06
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)