【问题标题】:Who calls autorelease pool谁调用自动释放池
【发布时间】:2015-06-21 01:18:37
【问题描述】:

谁调用自动释放池或谁管理它。我在函数内部的变量上调用 autorelease,但是谁来管理这个 autorelease 调用、调用函数或调用函数,或者谁来管理?

【问题讨论】:

  • 我不太清楚为什么会投反对票。这是一个涉及正确使用自动释放及其操作的合法问题。 (虽然它在文档中介绍..)

标签: ios objective-c autorelease nsautoreleasepool


【解决方案1】:

首先,如果你说autorelease,不要。停止使用手动内存管理并使用 ARC。它比你知道的多。

好的,假设你autorelease。然后它被放置在自动释放池中,并且它的保留计数保持递增。当自动释放池耗尽时,它的保留计数将再次减少。 何时发生取决于您所谈论的自动释放池。

  • 如果你真的创建了这个自动释放池,那么当你告诉 drain 时它就会耗尽。在 ARC 下,当我们到达 @autoreleasepool{} 指令块的末尾时就会发生这种情况。

  • 如果它是默认的自动释放池,则运行时会处理它,而您对此一无所知或无法控制。您可以确定在您完成所有代码并且应用程序处于空闲状态后,将会有一个排水调用,但对此没有任何保证。

【讨论】:

  • 我的书帮你理解自动释放机制:apeth.com/iOSBook/ch12.html#_autorelease
  • 感谢马特,我正在使用 ARC,但正在深入研究自动发布...所以问题...
  • "然后这个对象的保留计数增加,它被放置在自动释放池中。"从技术上讲,在对象上调用autorelease 不会对其保留计数产生任何直接影响。虽然我猜从概念上讲,您可以将其视为“释放”它的调用范围与“保留”它的自动释放池相结合,从而抵消了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2013-04-16
  • 1970-01-01
  • 2013-04-18
  • 2014-09-02
  • 2011-08-04
相关资源
最近更新 更多