有时一个类定义好之后,发现类属性不能满足需求,想要“扩展”其成员属性,此时可以采用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