1、在.h里面添加属性
#import <UIKit/UIKit.h>
@interface UIViewController(UIViewExtend)
@property (nonatomic,retain)NSString *key;
@end
2、在.m文件里面添加属性的关联
#import "UIViewController+UIViewExtend.h"
#import <objc/runtime.h>
//定义key属性的唯一标识,存取都是根据该标识处理的
static void *propertyKey = (void *)@"propertyKey";
@implementation UIViewController(HGJExtend)
//key属性的get方法,
//该方法根据propertyKey唯一标示取出对应的值
- (NSString *)key
{
returnobjc_getAssociatedObject(self,propertyKey);
}
//key属性的set方法,该方法根据OBJC_ASSOCIATION_COPY_NONATOMIC定义的存放策略
//把key1的值存储到propertyKey对应的内存里面
- (void)setKey:(NSString *)key1
{
objc_setAssociatedObject(self,propertyKey,key1,OBJC_ASSOCIATION_COPY_NONATOMIC);
}
3、OBJC_ASSOCIATION_COPY_NONATOMIC属性对应.h里面定义的nonatomic和retain字断,
按照前面属性的设置来定义该字断类型:
typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {
OBJC_ASSOCIATION_ASSIGN = 0, //assign
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,//nonatomic, retain
OBJC_ASSOCIATION_COPY_NONATOMIC = 3, //nonatomic, copy
OBJC_ASSOCIATION_RETAIN = 01401, //retain
OBJC_ASSOCIATION_COPY = 01403 //copy
};
4、使用
[self setKey:@"hello extend"];
[self key];