自动释放池仅在应用程序结束时耗尽?

Jos*_*ton 1 memory-management objective-c ios automatic-ref-counting

在ios中,主要的自动释放池包含UIApplicationMain.如果我没有在应用程序内部手动设置其他自动释放池,这是否意味着每当我使用自动释放在应用程序中释放对象时,在UIApplicationMain完成,池被耗尽,应用程序终止之前,它实际上不会被释放?

这似乎是这种情况,如果是这样,使用自动释放似乎是一个非常糟糕的主意.所有对象,即使只是为了临时原因而创建,也会一直存在,直到应用程序结束,从而消耗大量内存.

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

Aya*_*pta 5

一点也不!

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

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

运行循环仍将继续运行,直到应用程序运行并继续处理进一步的迭代.

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