Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 声明两个属性并使用相同的键调用objc_setAssociatedObject_Iphone_Ios_Objective C_Objective C Category - Fatal编程技术网

Iphone 声明两个属性并使用相同的键调用objc_setAssociatedObject

Iphone 声明两个属性并使用相同的键调用objc_setAssociatedObject,iphone,ios,objective-c,objective-c-category,Iphone,Ios,Objective C,Objective C Category,在UIButton.h类文件中: @interface UIButton (zz) @property (nonatomic,strong) NSString *param1; @property (nonatomic,strong) NSString *param2; @end 在类别UIButton.m文件中:(注意:所有键都是0) 以下是测试代码: .... .... UIButton *b1 = [UIButton buttonWithType:UIButtonTypeCustom];

在UIButton.h类文件中:

@interface UIButton (zz)
@property (nonatomic,strong) NSString *param1;
@property (nonatomic,strong) NSString *param2;
@end
在类别UIButton.m文件中:(注意:所有键都是0)

以下是测试代码:

....
....
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);
输出结果:

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
我想知道为什么它对同一个键是正确的??? 谢谢。



您对这两个参数使用了键相同的
objc\u getAssociatedObject
objc\u setAssociatedObject
,因此它们设置/获取相同的对象

我不确定是否理解您的问题。您正在使用两个属性访问同一对象,因此您的输出将最后一组对象“b1 2222”和“b2 2222”打印两次。很抱歉我的描述不清楚,关于objc_setAssociatedObject函数是:void objc_setAssociatedObject(id对象,const void*键,id值,objc_AssociationPolicy)第二个参数键是一个空指针。每个关联的密钥必须是唯一的。典型的模式是使用staticvariable(来自apple)。但它在我的代码中不是唯一的,并且工作正常。object+key是唯一的,而不仅仅是key。所以对不同对象共享同一个键是正确的,但对同一对象的不同属性不共享同一个键。@xuanwenchao:不正确:您设置了
b2.param1=@“b2 1111”
,输出为“b2 param1=b2 2222”。谢谢您的回答,这是我代码中的两个属性(param1和param2)它们的setter方法是相同的键,但输出结果不同。[928:c07]b1参数1=b1 2222参数2=b1 2222[928:c07]b2参数1=b2 2222参数2=b2 2222
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