1. 程式人生 > >管理關聯對象和NSDictionary區別

管理關聯對象和NSDictionary區別

ons 記錄 區別 完全 style 管理 code 全局變量 oid

一、問題引出

為類添加關聯對象:

void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)

為NSDictionary添加對象:

- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;

objc_setAssociatedObject可以理解為給object對象(NSDictionary),采用policy策略添加key-value記錄。

二、區別

1、方法入參數中的key,分別是不透明指針和對象。對象只用調用isEqual:方法返回YES,NSDictionary視為同一記錄。而不透明指針必須是完全相同的指針,才能找到同一個關聯的對象。

2、基於第一點,objc_setAssociatedObject的入參key,必須是靜態全局變量,如static void *associatedKey = "associatedkey";

管理關聯對象和NSDictionary區別