使用runtime给分类添加属性
OBJC_EXPORT void
objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
id _Nullable value, objc_AssociationPolicy policy)
OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0, 2.0);
OBJC_EXPORT id _Nullable
objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)
OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0, 2.0);
objc_setAssociatedObject这四个后面的参数分别表示:源对象,关键字,关联的对象和一个关联策略。
关键策略是一个枚举值。
OBJC_ASSOCIATION_ASSIGN = 0, <指定一个弱引用关联的对象>
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, <指定一个强引用关联的对象>
OBJC_ASSOCIATION_COPY_NONATOMIC = 3, <指定相关的对象复制>
OBJC_ASSOCIATION_RETAIN = 01401, <指定强参考>
OBJC_ASSOCIATION_COPY = 01403 <指定相关的对象复制>
例如:给分类添加一个NSString类型的属性
- (void)setImgSaveURL:(NSString *)imgSaveURL {
objc_setAssociatedObject(self, @selector(imgSaveURL), imgSaveURL, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (NSString *)imgSaveURL {
return (NSString *)objc_getAssociatedObject(self, _cmd);
}