dans le dossier de la catégorie UIButton:déclarent deux biens et appellent objc_setAssociatedObject avec la même clé
@interface UIButton (zz)
@property (nonatomic,strong) NSString *param1;
@property (nonatomic,strong) NSString *param2;
@end
dans la catégorie UIButton fichier .m: (note: toutes les touches est 0)
@implementation UIButton (zz)
@dynamic param1;
@dynamic param2;
-(void)setParam1:(NSString *)param1{
objc_setAssociatedObject(self, 0, param1, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString*)param1{
return (NSString *)objc_getAssociatedObject(self, 0);
}
-(void)setParam2:(NSString *)param2{
objc_setAssociatedObject(self, 0, param2, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString*)param2{
return (NSString *)objc_getAssociatedObject(self, 0);
}
@end
ci-dessous code de test:
....
....
UIButton *b1 = [UIButton buttonWithType:UIButtonTypeCustom];
UIButton *b2 = [UIButton buttonWithType:UIButtonTypeCustom];
b1.param1 = @"b1 1111";
b1.param2 = @"b1 2222";
b2.param1 = @"b2 1111";
b2.param2 = @"b2 2222";
NSLog(@"b1 param1=%@ param2=%@",b1.param1,b1.param2);
NSLog(@"b2 param1=%@ param2=%@",b2.param1,b2.param2);
résultat de sortie:
2013-04-08 11:30:52.258 zazis[928:c07] b1 param1=b1 2222 param2=b1 2222
2013-04-08 11:30:52.259 zazis[928:c07] b2 param1=b2 2222 param2=b2 2222
Je voudrais savoir pourquoi il est correct pour la même clé ??? Merci.
je ne suis pas sûr que je comprends votre question. Vous accédez au même objet avec vos deux propriétés et votre sortie imprime deux fois le dernier objet défini "b1 2222" et "b2 2222". –
désolé pour ma description pas clair, à propos de la fonction objc_setAssociatedObject est: void objc_setAssociatedObject (objet id, const void * clé, valeur d'id, politique objc_AssociationPolicy) la deuxième clé de param est un pointeur vide. La clé pour chaque association doit être unique. Un modèle typique consiste à utiliser une variable statique (d'Apple). – xuanwenchao
mais ce n'est pas unique dans mon code et fonctionne correctement. – xuanwenchao