Category是不能添加成员变量方法的。官方没有给出明确的原因,主流的猜测可能是因为实现Category的大部分都是框架中原生的类,比如NSString,NSData之类的。如果添加了成员变量,内存必然会增大一些。但对于已编译的那么多的框架,静态库,就没法处理新的内存大小了,申请内存之类的就没法处理了。
但是我们可以通过其他方式动态的实现类似于成员变量的属性方法的功能。简单说就是可以存,可以取。运用的是OC中强大的Runtime功能。
具体代码如下:
.h中代码如下
#import <Foundation/Foundation.h>
static const * FrNameKeyObj = & FrNameKeyObj;
@interface NSObject (Pro2)
@property (nonatomic,copy) NSString * frName;
@end
.m中代码如下
#import "NSObject+Pro2.h"
#import <objc/runtime.h>
@implementation NSObject (Pro2)
@dynamic frName;
- (NSString *)frName{
return objc_getAssociatedObject(self, FrNameKeyObj);
}
- (void)setFrName:(NSString *)frName{
return objc_setAssociatedObject(self, FrNameKeyObj, frName, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end
亲测以上代码稳定运行