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

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

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

#import 

@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

4、参考:

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

你可能感兴趣的:(iOS移动开发)