#import <UIKit/UIKit.h>
/**
iOS 开发中,分类默认不允许保存属性
如果在分类中,定义一个属性,需要自己实现 getter & setter 方法,而且没有 _成员变量
如果在自己开发的框架中,希望在分类中动态添加属性,可以通过 OC 运行时的关联对象的功能!
运行时非常重要的一个应用:给分类动态添加属性,结果能够让框架包装的更好,让使用者做出最小的修改!
*/
@interface UIImageView (WebImage)
@property (nonatomic, copy) NSString *urlString;
@end
#import <objc/runtime.h>
@implementation UIImageView (WebImage)
const void *URLStringKey = "URLStringKey";
- (void)setUrlString:(NSString *)urlString {
/**
参数:
1. 属性的持有者
2. 属性的键值
3. 属性的数值
4. 属性的引用类型
*/
objc_setAssociatedObject(self, URLStringKey, urlString, OBJC_ASSOCIATION_COPY_NONATOMIC);
//void objc_setAssociatedObject(id object,Void* key , id value,object_AssociationPolicy policy)
}
- (NSString *)urlString {
return objc_getAssociatedObject(self, URLStringKey);
//objc_getAssociatedObject(id object, void* key)
} @end