1> 添加關聯對象atom
void objc_setAssociatedObject(id object, const void * key,
id value, objc_AssociationPolicy policy)spa
2> 得到關聯對象指針
id objc_getAssociatedObject(id object, const void * key)code
3> 移除全部的關聯對象對象
void objc_removeAssociatedObjects(id object) blog
假如已經有一個 XGPerson的類,如今咱們須要擴展這個類,而且添加一個 age 屬性內存
#import "XGPerson.h" // 分類屬性是不會生成 get\set 方法的,若是不重寫這兩個方法,就沒法正常使用屬性 @interface XGPerson (Test) @property (nonatomic,assign) int age; @end
#import "XGPerson+Test.h" #import <objc/runtime.h> @implementation XGPerson (Test) - (void)setAge:(int)age{ // @selector(age) 這個參數只要傳一個地址指針就能夠 objc_setAssociatedObject(self, @selector(age), @(age), OBJC_ASSOCIATION_ASSIGN); } - (int)age{ // 隱式參數 // _cmd = @selectior(age) return [objc_getAssociatedObject(self, _cmd) intValue]; }
調用:ci
XGPerson* p1 = [[XGPerson alloc]init]; p1.name = @"p1"; p1.age = 18; XGPerson* p2 = [[XGPerson alloc]init]; p2.name = @"p2"; p2.age = 20; NSLog(@"p1Name:%@ p1Age:%i----p2Name:%@ p2Age:%i",p1.name,p1.age,p2.name,p2.age);
輸出:rem
2018-11-29 14:20:38.666084+0800 關聯對象(增長分類屬性)[1923:87124] p1Name:p1 p1Age:18----p2Name:p2 p2Age:20
AssociationsManager
AssociationsHashMap
ObjectAssociationMap
ObjcAssociation get