在ios中,主要自动释放池包含UIApplicationMain。如果我没有在应用程序内部手动设置其他自动释放池,这是否意味着每当我使用自动释放在应用程序中释放对象时,在UIApplicationMain完成,池被耗尽,应用程序终止之前,它实际上不会被释放?
这似乎就是这种情况,如果使用自动释放似乎是一个非常糟糕的主意。所有对象,即使只是为了临时原因而创建,也会一直存在,直到应用程序结束,从而消耗大量内存。
例如,我认为许多工厂方法都使用自动释放。使用工厂方法创建的所有内容是否仅在应用程序完成时释放?
答案 0 :(得分:5)
完全没有!
UIApplicationMain
为您的应用创建主要运行循环。您可以将其视为处理当前队列中的消息的无限循环,并继续下一次迭代。
自动释放池在每次运行循环迭代结束时排出所有自动释放的对象。这意味着,假设您的应用处理按钮上的触摸事件,并在运行循环的单次迭代中重新加载表视图。然后,在迭代完成后,将在平均时间内创建的所有自动释放的对象将被耗尽。
运行循环仍将继续运行,直到应用程序运行并继续处理进一步的迭代。
但是,如果您在应用中创建了具有自己的运行循环的单独线程,那么您有责任为您生成的任何新线程创建自动释放池。