我有一个UIViewController,它被推到容器控制器上,然后弹出,使用分配工具,我可以看到视图控制器随后被销毁。但是,控制器的dealloc中的断点永远不会到达。有人知道为什么不叫dealloc吗?ARC有可能在不调用dealloc的情况下摧毁一个对象吗?
另外,我还禁用了NSZombies (有些人说这会导致dealloc不着火)。
编辑:
Dealloc做的不多,只会打印到控制台,它永远不会被调用:
- (void)dealloc { NSLog(@"Deallocating..."); }
我不能张贴集装箱控制器-它是专有的,太复杂了。Dealloc在某些控制器上一直被称为Dealloc,而在其他控制器上被称为Dealloc。如果我能找到时间,我将尝试发布一个简单的版本,复制问题。
是否有任何方法来验证NSZombies是禁用的?
Edit2
我发了一张来自仪器的截图,在我看来,这是正确的交易。

发布于 2012-09-21 15:02:33
我刚刚遇到了一个类似的问题。你有什么街区,你指的是“自我”吗?在我的文章中,我有一些提示观察的块,我指的是“自我”。在弧下,自我被保留在块中。我的脱衣舞没有被打电话,这就是我移除观察的地方。
诀窍是创建对“self”的__weak (iOS 5+)或__unsafe_unretained (iOS 4.x)引用,并使用它在块中访问self或任何_iVars (这些都会导致“self”被保留)。下面是一个例子。
__unsafe_unretained TableViewController *weakSelf = self;
[[NSNotificationCenter defaultCenter] addObserverForName:NSManagedObjectContextObjectsDidChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
if (weakSelf.tableView) {
[weakSelf.tableView reloadData];
}
}];发布于 2013-09-13 20:27:52
在我的例子中,是NSTimer。它保留了它的目标,所以当您完成视图控制器时,需要使计时器失效。
发布于 2012-08-26 02:56:42
如果VC没有调用dealloc,那么我敢打赌代码中有一个循环引用,它阻止ARC调用dealloc。
有些事情需要检查:
当我的委托声明没有使用__unsafe_unretained时,我感到很难受。
https://stackoverflow.com/questions/9219030
复制相似问题