1、给分类绑定对象
objc_AssociationPolicy 是一个枚举,里面的枚举值分别代表要添加的属性的修饰类型。
1、 OBJC_ASSOCIATION_ASSIGN 相当于weak
2 、 OBJC_ASSOCIATION_RETAIN_NONATOMIC 相当于strong
和nonatomic
3、 OBJC_ASSOCIATION_COPY_NONATOMIC 相当于copy
和nonatomic
4、 OBJC_ASSOCIATION_RETAIN 相当于strong
和atomic
5、 OBJC_ASSOCIATION_COPY 相当于copy
和atomic
2、方法:
//1、 设置关联对象
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);
//2、获得关联对象
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);
//3、删除关联对象。
OBJC_EXPORT void
objc_removeAssociatedObjects(id _Nonnull object)
OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0, 2.0);
例:
// 1、给 NSObject 添加一个分类,分类添加一个cName属性
// .h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSObject (AA)
@property (nonatomic,copy)NSString *cName;
@end
NS_ASSUME_NONNULL_END
//.m
#import "NSObject+AA.h"
#import <objc/message.h>
@implementation NSObject (AA)
-(void)setCName:(NSString *)cName
{
objc_setAssociatedObject(self, "cName", cName, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
-(NSString *)cName
{
return objc_getAssociatedObject(self, "cName");
}
@end
// 3、使用
NSObject *obj=[[NSObject alloc]init];
obj.cName=@"哈哈";
NSLog(@"%@",obj.cName);