runtime中这么一套api,对象关联AssociatedObject,通过其可以动态的将某个对象当前类建立关联(自定义api的时候常用)
常用的方法有objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects(这个却不常用)
一般用在给分类属性建立关联,或者封装一些api时,在内部建立关联对象,避免对外暴露一些属性
其使用方式如下,默认其会随着对象的释放而是放,因此不需要手动释放,如果想提前释放可以调用objc_removeAssociatedObjects方法释放
@interface NSObject (Associated)
@property (nonatomic, strong) id associatedObject;
@end
@implementation NSObject (Associated)
- (void)setAssociatedObject:(id)object {
objc_setAssociatedObject(self, @selector(associatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id)associatedObject {
return objc_getAssociatedObject(self, @selector(associatedObject));
}
dealloc逻辑往后走,可以看到,最终会执行_object_remove_assocations方法来移除该对象的关联对象