2012-01-07 97 views
3

我有以下幾點:添加對象的NSMutableArray作爲對象的關聯參考

static char associated_obj_key; 
id anObj; 

NSMutableArray *a = [[NSMutableArray alloc] init]; 
objc_setAssociatedObject(anObj, &associated_obj_key, a, OBJC_ASSOCIATION_RETAIN); 
[a release]; 

而且我想知道:如何將對象添加到NSMutableArrayanObj對象關聯引用裏面?這是甚麼可能嗎?

我可以做甚麼像[objc_getAssociatedObject(anObj, &associated_obj_key) addObject:something];

回答

3

是的,但你必須在所有地方都有相同的密鑰。由於使用某個靜態變量的地址確實是一種推薦的方式,因此我建議將用於獲取關聯對象的引用的單個方法(如果需要,創建)分解出來。我使用以下內容:

- (NSMutableArray*) getOrCreateArray 
{ 
    static const char key; 
    NSMutableArray* arr = objc_getAssociatedObject(self, &key); 
    if (!arr) 
    { 
     arr = [NSMutableArray array]; 
     objc_setAssociatedObject(self, &key, arr, OBJC_ASSOCIATION_RETAIN); 
    } 
    return arr; 
} 

- (void) someMethod 
{ 
    id something = // .... 
    [[self getOrCreateArray] addObject: something]; 
}