2013-04-08 1 views
0

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.

+1

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". –

+0

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

+0

mais ce n'est pas unique dans mon code et fonctionne correctement. – xuanwenchao

Répondre

1

see here

Vous avez utilisé objc_getAssociatedObject et objc_setAssociatedObject avec la même clé pour les deux paramètres, donc ils ont mis/obtenir le même objet

+0

merci pour votre réponse, il est deux propriété dans mon code (param1 et param2) et la méthode setter est la même clé, mais le résultat de sortie est defferent. [928: c07] b1 param1 = b1 2222 param2 = b1 2222 [928: c07] b2 param1 = b2 2222 param2 = b2 2222 – xuanwenchao

+0

J'avais tort. ....... – xuanwenchao

Questions connexes