先说结论。常规category是用来添加函数的,并不能添加属性。但是利用runtime中objc_setAssociatedObject等方法可以生成关联对象,进而实现添加属性的需求。
接下来上代码。
.h文件
#import <UIKit/UIKit.h>
@interface UIView (something)
@property (nonatomic,copy)NSString *something;
@end
.m文件
#import "UIView+something.h"
#import <objc/runtime.h>
static const void *somethingKey = &somethingKey;
@implementation UIView (something)
//@dynamic something;
-(void)setSomething:(NSString *)something{
objc_setAssociatedObject(self, somethingKey, something, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
-(NSString *)something{
return objc_getAssociatedObject(self, somethingKey);
}
@end