运行结束循环 – autorelease池恢复

据我所知,autoreleased对象清理一旦释放autoreleased池。 现在,autorelease池将在运行循环结束时被释放。

我的问题是,如果在我的课上,我不创build一个自定义的autorelease池,并在该类的一些对象上调用autorelease方法,在什么时候将这些对象恢复? “运行循环的结束”是否意味着“应用程序的结束”?

你必须了解运行循环的概念。 iOS中的运行循环等待某个事件发生,然后对其执行操作。 该事件可能是用户触摸屏幕,接听电话等

对于iOS处理的每一个这样的事件,都会在开始时创build一个新的自动释放池,并在事件处理完成时耗尽。 从理论上讲,Cocoa Touch可以创build任意数量的嵌套自动释放池,但是您应该知道的主要事件循环是事件循环。

也许应用程序生命周期中的这个图将有所帮助。

UIKit事件循环

在伪代码中,这归结为,

int UIApplicationMain(...) { while (!shouldQuitApplication) { Event *someEvent = // wait for next event; NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init]; // handle event [myPool release]; } } 

这些是iOS中的事件types

 UIEventTypeTouches, UIEventTypeMotion, UIEventTypeRemoteControl, 

因此,在每次触摸,动作或远程控制事件被处理之后,池将被排空。

运行循环的“结束”意味着运行循环的每次迭代的结束,而不是应用程序的结束。

不是真的。 想象一下,RunLoop有“圈”:)在每个“圆”的开始,RunLoop创build自动释放池并在退出“圈子”之前将其排空。