В проекте, над которым я работал, первоначальный автор решил использовать 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);
Какой смысл связывать устройство с контроллером представления, если это уже переменная экземпляра?