ios dealloc with autoreleasepool

时间:2012-02-08 21:03:50

标签: ios dealloc nsautoreleasepool

我的问题中可能有错误这个术语,但这是我最好的尝试:

我的ios应用的ARC启用了autoreleasepool。因此,我不会根据自己的选择释放内存,但它似乎是在GC拾取而非。

我无法让dealloc针对已从其UIView视图中删除的特定super投放。这是正常的吗?

1 个答案:

答案 0 :(得分:1)

所有ARC都会确保在适当的时间发送保留和释放消息(当您开始和停止引用对象时)。没有GC - deallocs与以前完全一样 - 这是在保留计数达到0时完成的。

自动释放池用于调用自动释放而不是释放。这意味着通过将释放调用放入由自动释放池管理的队列来延迟释放调用 - 当池耗尽时,队列中的每个对象都会在其上调用释放。

所以,如果你依赖ARC -

  1. 请勿自行调用保留,释放或自动释放 - 如果您尝试,则会出现构建错误

  2. 使用(强)属性来保留您需要留在的引用

  3. 如果你最终得到一个循环引用 - 一个强指针指向一个强点指向的对象 - 那么这一切都会崩溃 - ARC不会释放任何东西。您需要将其中一个指针设置为nil,或者使其中一个指针变弱。

  4. 将断点放在您认为应该调用dealloc的位置并检查对象retainCount。使用Leaks仪器找出可能发生的情况。

相关问题