关联对象实现weak属性

要达到的效果:

现有 obj1, 通过关联对象方式添加了 对象 weakObj,要在 weakObj 被release后,通过关联对象获取时,获取到的是nil。

方法如下: weakObj 通过关联对象的方式添加 DeallocObj,DeallocObj 持有 block,然后在DeallocObj在release的时候调用dealloc,dealloc处执行block,block讲对应关联对象设置为nil。

疑点:

怎么能保证weakObj与DeallocObj的释放时机就是一致的呢?要是DeallocObj 先释放或者是后释放,感觉都有问题。

 代码如下:

// 添加释放block - (void)weak_deallocBlock:(void(^)(void))block{     DeallocObj *observer = objc_getAssociatedObject(self, &BLOCK_KEY);     if (!observer) {         observer = [DeallocObj new];         objc_setAssociatedObject(self, &BLOCK_KEY, observer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);     }     observer.block = block; }

@implementation DeallocObj -(void)dealloc{     NSLog(@"this is dealloc DeallocObj");     if (self.block) {         self.block();     } } @end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容