Autoreleasepool 仅在应用程序结束时耗尽?

Autoreleasepool drained only at end of app?

在 ios 中,主自动释放池环绕 UIApplicationMain。如果我不在应用程序中手动设置其他自动释放池,这是否意味着每当我使用自动释放在应用程序中释放一个对象时,它实际上不会被释放,直到 UIApplicationMain 完成,池被排空,应用程序终止?

情况似乎是这样,如果是这样,使用自动释放似乎是一个非常糟糕的主意。所有对象,即使只是临时创建的,都会一直保留到应用程序结束,从而浪费大量内存。

例如,我认为许多工厂方法都使用自动释放。使用工厂方法创建的所有内容是否仅在应用程序完成时发布?

完全没有!

UIApplicationMain 为您的应用创建主 运行 循环。您可以将其视为处理当前队列中的消息并继续其下一次迭代的无限循环。

自动释放池在每个 运行 循环迭代结束时排出所有自动释放的对象。这意味着,假设您的应用程序处理按钮上的触摸事件并在 运行 循环的单次迭代中重新加载 table 视图。然后所有在此期间创建的自动释放对象将在迭代完成后被耗尽。

运行 循环仍将继续 运行 直到应用程序 运行s 并将继续处理更多事件。

但是,如果您在您的应用程序中创建单独的线程,该线程将有自己的 运行 循环,那么您有责任为您生成的任何新线程创建自动释放池。