ios - 对象被释放但没有调用 dealloc
<p><p>在我的应用程序的某个时刻,我从其父 ViewController (我们称其为 <strong>B</strong>)中删除了一个 ViewController (我们称其为 <strong>A</strong>)。而且即使 A 不再被引用,它的 dealloc 方法也不会被调用。</p>
<p>我用仪器查了一下,A真的被释放了。活体(A类)数量为0。</p>
<p>NSZombie 未启用,我看到它可能会干扰 dealloc 调用。</p>
<p>dealloc 方法被调用的唯一时刻是 ViewControllerB 被释放的时候。那一刻,堆栈跟踪是这样的:</p>
<pre><code>#00x0001ac78 in - <-- This is A
#10x021061bf in _objc_deallocOnMainThreadHelper ()
#20x029f34d0 in _dispatch_client_callout ()
#30x029e1726 in _dispatch_main_queue_callback_4CF ()
#40x0274443e in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ ()
#50x026855cb in __CFRunLoopRun ()
#60x026849d3 in CFRunLoopRunSpecific ()
#70x026847eb in CFRunLoopRunInMode ()
#80x046095ee in GSEventRunModal ()
#90x0460942b in GSEventRun ()
#10 0x00db4f9b in UIApplicationMain ()
#11 0x00028ea2 in main at /../main.m:17
</code></pre>
<p>我不确定dealloc是如何触发的</p>
<p>知道这里会发生什么吗? </p>
<p>-- 编辑</p>
<p>我使用类方法创建 ViewControllerA:</p>
<pre><code>+ (instancetype)viewController
{
return [ init];
}
</code></pre>
<p>奇怪的是,当我用 [ init] 替换对此类方法的调用时,一切都按预期工作。我不知道发生了什么。有什么想法吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我终于找到了发生的事情。 </p>
<p>未被dealloc的 ViewController 是通过类方法创建的,例如:<br/>
<code>+ (instancetype) createMyViewController</code>。 </p>
<p>这种方法返回自动释放对象。</p>
<p>我唯一的猜测是,在我的情况下,自动释放池已经耗尽得太晚了。在适当的代码周围添加 <code>@autoreleasepool {}</code>block 可以解决所有问题。</p></p>
<p style="font-size: 20px;">关于ios - 对象被释放但没有调用 dealloc,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/25408225/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/25408225/
</a>
</p>
页:
[1]