iOS开发笔记之三十八——利用objc_setAssociatedObject创建关联

有时一个类定义好之后,发现类属性不能满足需求,想要“扩展”其成员属性,此时可以采用objc_setAssociatedObject这种创建关联的方法进行扩展类属性。使用示例如下:

1、创建一个Student类,又name,age属性;如下:

#import <Foundation/Foundation.h>

@interface Student : NSObject
@property(nonatomic, copy) NSString *name;   //姓名
@property(nonatomic, copy) NSString *age;     //年龄
@end

2、我们在另一个类中实例化它,利用catogry对它进行扩展,并利用objc_setAssociatedObject进行关联,如下:

@class Student;
@interface Student(StudentEx)
@property (nonatomic, copy) NSString *sex;  //性别
@end
@implementation Student(StudentEx)
//#define KeyValue @"key"
static char const *const observerKey = "sex";

-(NSString *)sex
{
//    return objc_getAssociatedObject(self,KeyValue);
    return objc_getAssociatedObject(self,observerKey);
}
-(void) setSex:(NSString *)sex
{
//    objc_setAssociatedObject(self,KeyValue,sex,OBJC_ASSOCIATION_COPY);
    objc_setAssociatedObject(self,observerKey,sex,OBJC_ASSOCIATION_COPY);
}
@end
上面的key的定义有两种方法。

3、在此类中实例化,并使用它如下:

Student *stu = [[Student alloc] init];
    stu.name = @"李林";
    stu.age = @"10";
    stu.sex = @"男";
    NSLog(@"姓名:%@ 年龄:%@ 性别:%@",stu.name,stu.age,stu.sex);
打印结果如下:
2015-05-14 17:47:17.834 Banksy[56884:4598181] 姓名:李林 年龄:10 性别:男

注意:使用的类中需要包含以下头文件:

#import <objc/runtime.h>

4、参考:

http://blog.csdn.net/lj20082100/article/details/9235545

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值