1、問題引出spa
爲類添加關聯對象:指針
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
爲NSDictionary添加對象:code
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;
objc_setAssociatedObject能夠理解爲給object對象(NSDictionary),採用policy策略添加key-value記錄。對象
2、區別blog
一、方法入參數中的key,分別是不透明指針和對象。對象只用調用isEqual:方法返回YES,NSDictionary視爲同一記錄。而不透明指針必須是徹底相同的指針,才能找到同一個關聯的對象。ci
二、基於第一點,objc_setAssociatedObject的入參key,必須是靜態全局變量,如static void *associatedKey = "associatedkey";io