我们知道分类可以很简单的添加方法,但是添加属性却无能为力,但是我们还是可以通过动run_time的associate就可以做到:
比如说我要在UImage中添加一个url属性
//.h
@interface UIImage (url)
@property (nonatomic, copy) NSString *url;
@end
//.m
#import <objc/runtime.h>
@implementation UIImage (url)
static char urlKey; //每个属性对应一个key,run_time通过key来标示每个属性
- (void)setUrl:(NSString *)url {
objc_setAssociatedObject(self, &urlKey, url, OBJC_ASSOCIATION_COPY_NONATOMIC); //最后一个参数跟@property括号里参数是一样的。
}
- (NSString *)url {
return objc_getAssociatedObject(self, &urlKey);
}
用时:
#import "UIImage+url.h"
...
UIImage *image = [[UIImage alloc] init];
image.url = @"www";