将对象添加到NSMutableArray作为对象的关联引用

时间:2012-01-07 21:15:01

标签: objective-c

我有以下内容:

static char associated_obj_key;
id anObj;

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

我想知道:如何在NSMutableArray对象的关联引用中向anObj添加对象?这样的事情甚至可能吗?

我甚至可以做[objc_getAssociatedObject(anObj, &associated_obj_key) addObject:something];之类的事情吗?

1 个答案:

答案 0 :(得分: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];
}