Ios 为什么即使在ivar为零后,ivar仍保留块?

Ios 为什么即使在ivar为零后,ivar仍保留块?,ios,automatic-ref-counting,block,retain-cycle,Ios,Automatic Ref Counting,Block,Retain Cycle,我们有这样的构造(ARC代码): 问题是对象从未解除分配,因为self从未完全释放。如果我将self替换为weakSelf版本,则对象将成功释放 有没有一种方法可以使ivar为零,从而释放它“保持”的块,并释放对象 我没有看到你的代码中有明显的错误。可能错误在MyObject-你试过用仪器分析吗?“泄密”工具很好地显示了保留周期。我输入了这篇长文章,但最后都是猜测。你真的需要做两件事。首先,包含更多代码。具体来说,loadOnSuccess和此代码段的整个代码。。。显然还有更多。第二,请重新表述

我们有这样的构造(ARC代码):

问题是对象从未解除分配,因为self从未完全释放。如果我将self替换为weakSelf版本,则对象将成功释放


有没有一种方法可以使ivar为零,从而释放它“保持”的块,并释放对象

我没有看到你的代码中有明显的错误。可能错误在
MyObject
-你试过用仪器分析吗?“泄密”工具很好地显示了保留周期。我输入了这篇长文章,但最后都是猜测。你真的需要做两件事。首先,包含更多代码。具体来说,loadOnSuccess和此代码段的整个代码。。。显然还有更多。第二,请重新表述你的最后一个问题。我只能猜到你在问什么,但不清楚你到底想达到什么目的——利用弱自我是打破保留周期的常用方法……谢谢各位的反馈。我需要确认我不是疯子。最后:我使用的是旧版本的A2DynamicDelegate,在某些情况下无法正确发布;我有最新的版本在那里,它是固定的。再次感谢!
// load an object into an ivar using a block
self->objectLoader = [MyObject loadOnSuccess:^(MyObject *object) {

    // reference self from the block, so self is retained
    self->_object = object;

    // try to dereference the loader
    self->objectLoader = nil;        
}