要达到的效果:
现有 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