En un proyecto que he tomado, el autor original ha optado por usar objc_setAssociatedObject()
y no estoy 100% claro de qué se trata o por qué decidieron usarlo.¿Qué es objc_setAssociatedObject() y en qué casos debería usarse?
Decidí buscarlo y, desafortunadamente, los documentos no son muy descriptivos sobre su propósito.
objc_setAssociatedObject
establece un valor asociado para un objeto dado usando una política clave y de asociación dado.
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
Parámetros
object
El objeto de origen para la asociación.
key
La clave para la asociación.
value
El valor para asociar con la tecla para el objeto. Pase nil para borrar una asociación existente.
policy
La política para la asociación. Para conocer los valores posibles, consulte "Comportamientos asociativos de los objetos".
Entonces, ¿qué función cumple exactamente esta función y en qué casos debería utilizarse?
Edición después de la lectura responde
Entonces, ¿cuál es el punto en el siguiente código?
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);
¿Cuál es el punto de asociar el dispositivo con el controlador de vista si ya es una variable de instancia?
Hola, estaba revisando la documentos con la intención de publicar una respuesta similar. Mientras me pegabas, me tomé la libertad de hacer un enlace de hipertexto en tu respuesta. Espero que no te importe. – JeremyP
@JeremyP: Claro. Muchas gracias por eso. Perdido para agregar el enlace. Gracias por su contribución – visakh7
Podría compartir algunas reputaciones si pudiera. : P – visakh7