В проекте, который я взял, оригинальный автор решил использовать objc_setAssociatedObject()
, и я не на 100% не понимаю, что он делает или почему они решили его использовать.
Я решил посмотреть его и, к сожалению, документы не очень описательны в отношении его цели.
objc_setAssociatedObject
Устанавливает связанное значение для данного объекта с использованием заданной политики ключа и ассоциации. void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
Параметры object
Исходный объект для ассоциации. key
Ключ для ассоциации. value
Значение, связанное с ключом для объекта. Передайте нуль, чтобы очистить существующую ассоциацию. 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);
Какой смысл связывать устройство с контроллером представления, если он уже является переменной экземпляра?