Что такое objc_setAssociatedObject () и в каких случаях его следует использовать?

В проекте, над которым я работал, первоначальный автор решил использовать objc_setAssociatedObject () , и я не на 100% понимаю, что он делает и почему они решили его использовать.

I решил поискать его, и, к сожалению, документы не очень подробно описывают его назначение.

objc_setAssociatedObject
Устанавливает связанное значение для данного объекта, используя данный ключ и политику ассоциации.
void objc_setAssociatedObject (id объект, ключ void *, значение идентификатора, политика objc_AssociationPolicy)
Параметры
объект
Исходный объект для ассоциации.
ключ
Ключ для ассоциации.
значение
Значение, которое нужно связать с ключевым ключом для объекта. Передайте nil, чтобы очистить существующую ассоциацию.
policy
Политика для ассоциации. Возможные значения см. В разделе «Ассоциативное поведение объектов». ”

Итак, что именно делает эта функция и в каких случаях ее следует использовать?


Редактировать после прочтения ответов

Итак, в чем смысл следующего кода?

Device *device = [self.list objectAtIndex:[indexPath row]];
DeviceViewController *next = [[DeviceViewController alloc] initWithController:self.controller
                                                                            device:device
                                                                               item:self.rootVC.selectedItem];  
    objc_setAssociatedObject(device, &kDeviceControllerKey, next, OBJC_ASSOCIATION_RETAIN);

Какой смысл связывать устройство с контроллером представления, если это уже переменная экземпляра?

67
задан Jasarien 6 May 2011 в 09:57
поделиться