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

标签 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)

@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

下面是测试代码:

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

我想知道为什么它对于相同的 key 是正确的??? 谢谢。

最佳答案

see here

您使用 objc_getAssociatedObjectobjc_setAssociatedObject 两个参数具有相同的键,因此它们设置/获取相同的对象

关于iphone - 声明两个属性并使用相同的键调用 objc_setAssociatedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15873128/

相关文章:

ios - 如何使用 Xcode 在 Swift 中按 UI 元素类型进行应用程序范围/更快的更新......?

iphone - Xcode 中的条件编译

iphone - 显示错误iphone的描述

ios越狱设备将静态库链接到第三方应用程序

iphone - 同一个委托(delegate)上的多个 UIActionSheets

ios - 使用淡入淡出效果动画 CALayer mask 变化

ios - 为什么通过引用传递时指针值会改变?

ios - UIImageView,从远程 URL 加载 UIImage

ios - 从 Amazon S3 下载所有图像

objective-c - 从 Xcode 3 导入项目时,Xcode 4 代码丢失语法着色