【问题标题】:When using autorelease, when is it actually released?使用自动释放时,它实际上是什么时候释放的?
【发布时间】:2010-10-31 01:56:09
【问题描述】:

有时我想知道什么时候会自动发布。我在各种对象的dealloc中添加了一个NSLog,但是找不到有用的东西。

使用自动释放时,什么时候释放?它是不可预测的,还是有一些额外的线程在运行?谢谢。

【问题讨论】:

    标签: objective-c memory-management autorelease foundation


    【解决方案1】:

    当“自动释放池过期”时。

    这通常意味着,当堆栈展开时。

    所以这样想吧 - 您的应用是事件驱动的。您会收到发送给它的事件 - 它们通过一系列函数进行处理。当每个函数返回,并且事件处理完毕后,将调用 autorelease。

    这意味着当你自动释放一个对象时,你可以指望它仍然活着,并将它从一个函数返回给它的调用者。在处理任何类型的后续事件或在现有堆栈框架之外调用时,不要期望它会出现。

    【讨论】:

      【解决方案2】:

      From the iOS documentation

      Cocoa 应用程序中的每个线程都维护自己的 NSAutoreleasePool 对象堆栈。当一个线程终止时,它会自动释放与其关联的所有自动释放池。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        相关资源
        最近更新 更多