associatedObject对象关联简介

181 阅读1分钟

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方法来移除该对象的关联对象