Dans un projet que j'ai pris en charge, l'auteur original a choisi d'utiliser objc_setAssociatedObject()
et je ne sais pas exactement ce qu'il fait ni pourquoi ils ont décidé de l'utiliser.
J'ai décidé d'y jeter un coup d'œil et, malheureusement, la documentation n'est pas très descriptive quant à son objectif.
objc_setAssociatedObject
Définit une valeur associée pour un objet donné en utilisant une clé et une politique d'association données.void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
Paramètresobject
L'objet source de l'association.key
La clé pour l'association.value
La valeur à associer à la clé de l'objet. Passez nil pour effacer une association existante.policy
La politique de l'association. Pour connaître les valeurs possibles, voir "Comportements des objets associatifs".
Alors, que fait exactement cette fonction et dans quels cas doit-elle être utilisée ?
Modifier après avoir lu les réponses
Quel est donc l'intérêt du code suivant ?
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);
Quel est l'intérêt d'associer le dispositif au contrôleur de vue s'il s'agit déjà d'une variable d'instance ?