Добавление объекта в NSMutableArray в качестве ассоциативной ссылки объекта - PullRequest
3 голосов
/ 08 января 2012

У меня есть следующее:

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 Ответ

3 голосов
/ 08 января 2012

Да, но вы должны иметь один и тот же ключ повсюду.Поскольку использование адреса некоторой статической переменной действительно является рекомендуемым способом, я предлагаю выделить один метод для получения ссылки на связанный объект (создание при необходимости).Я использую следующее:

- (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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...