iOS
Objective-C Objets associés
Recherche…
Introduction
Introduits pour la première fois dans iOS 3.1 dans le cadre du runtime Objective-C, les objets associés permettent d’ajouter des variables d’instance à un objet de classe existant (avec sous-classement).
Cela signifie que vous pourrez attacher n'importe quel objet à tout autre objet sans sous-classer.
Syntaxe
void objc_setAssociatedObject (objet id, void * key, id value, objc_AssociationPolicy policy)
id objc_getAssociatedObject (objet id, void * key)
void objc_removeAssociatedObjects (objet id)
Paramètres
Param | Détails |
---|---|
objet | L'objet existant que vous souhaitez modifier |
clé | Cela peut être fondamentalement n'importe quel pointeur qui a une adresse mémoire constante, mais une bonne pratique est d'utiliser ici une propriété calculée (getter) |
valeur | L'objet que vous souhaitez ajouter |
politique | La politique de mémoire pour cette nouvelle value c.-à-d. Si elle doit être conservée / attribuée, copiée, etc., comme toute autre propriété que vous déclarez |
Remarques
Exemple d'objet associé de base
Supposons que nous ayons besoin d'ajouter un objet NSString à SomeClass
(nous ne pouvons pas sous-classe).
Dans cet exemple, nous créons non seulement un objet associé, mais également l'enveloppons dans une propriété calculée dans une catégorie pour une plus grande netteté.
#import <objc/runtime.h>
@interface SomeClass (MyCategory)
// This is the property wrapping the associated object. below we implement the setter and getter which actually utilize the object association
@property (nonatomic, retain) NSString *associated;
@end
@implementation SomeClass (MyCategory)
- (void)setAssociated:(NSString *)object {
objc_setAssociatedObject(self, @selector(associated), object,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)associated {
return objc_getAssociatedObject(self, @selector(associated));
}
Maintenant, il serait aussi facile que cela d'utiliser la propriété
SomeClass *instance = [SomeClass alloc] init];
instance.associated = @"this property is an associated object under the hood";