2012-01-07 94 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]; 
}