Category添加属性与成员变量

来源:互联网 发布:java wait的用法 编辑:程序博客网 时间:2024/05/16 01:18
Category是Objective-C中常用的语法特性,通过它可以很方便的为已有的类来添加函数。但是Category不允许为已有的类添加新的属性或者成员变量。     

一种常见的办法是通过runtime.h中objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象。通过这种方法来模拟生成属性。

头文件声明:


@interface NSObject (IndieBandName)


@property (nonatomic, strong)NSString *indieBandName;

@property (nonatomic, assign)SEL OnImageFinish;


@end




实现的.m文件:

#import "NSObject+Extension.h"

#import <objc/runtime.h>


staticconst void *IndieBandNameKey = &IndieBandNameKey;

staticconst void * g_OnImageFinish = &g_OnImageFinish;


@implementation NSObject (IndieBandName)


@dynamic indieBandName;


- (NSString *)indieBandName {

    returnobjc_getAssociatedObject(self,IndieBandNameKey);

}


- (void)setIndieBandName:(NSString *)indieBandName {

    objc_setAssociatedObject(self,IndieBandNameKey, indieBandName,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}


- (SEL)OnImageFinish {

   SEL action; NSValue *value =objc_getAssociatedObject(self,g_OnImageFinish);

    [valuegetValue:&action]; return action;

}


- (void)setOnImageFinish:(SEL)action {

   NSValue *value = [NSValuevalue:&action withObjCType:@encode(SEL)];

    objc_setAssociatedObject(self,g_OnImageFinish, value,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}


@end




0 0
原创粉丝点击