Comme nous le savons, nous pouvons ajouter une variable en Objective-C en utilisant une catégorie et des méthodes d'exécution comme objc_setAssociatedObject
et objc_getAssociatedObject
. Par exemple:Comment objc_setAssociatedObject fonctionne-t-il?
#import <objc/runtime.h>
@interface Person (EmailAddress)
@property (nonatomic, readwrite, copy) NSString *emailAddress;
@end
@implementation Person (EmailAddress)
static char emailAddressKey;
- (NSString *)emailAddress {
return objc_getAssociatedObject(self,
&emailAddressKey);
}
- (void)setEmailAddress:(NSString *)emailAddress {
objc_setAssociatedObject(self,
&emailAddressKey,
emailAddress,
OBJC_ASSOCIATION_COPY);
}
@end
Mais quelqu'un sait ce qui ne objc_getAssociatedObject
ou objc_setAssociatedObject
faire? Je veux dire, où sont les variables que nous ajoutons à l'objet (ici self
) stockées? Et la relation entre variable et self
?
Une raison pour ne pas simplement utiliser la propriété? Je voudrais essayer de ne pas jouer avec le temps d'exécution sans comprendre comment cela fonctionne. –
[Voici] (http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-runtime.mm) leur implémentation. –
@ H2CO3, le fichier avec le code réellement intéressant est objc-references.mm: http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-references.mm –