运行结束循环 - 自动释放池恢复

Abh*_*nav 7 iphone cocoa-touch objective-c nsautoreleasepool ios

据我所知,一旦自动释放的池被释放,自动释放的对象就会被清除.现在,自动释放池将在运行循环结束时释放.

我的问题是,如果在我的课程中,我没有创建自定义自动释放池并在该类中的某些对象上调用autorelease方法,那么这些对象将被恢复?"运行循环结束"是否暗示"应用程序结束"?

Anu*_*rag 21

您必须了解运行循环的概念.iOS中的运行循环等待某些事件发生,然后它就会对其起作用.该事件可能是用户触摸屏幕,接听电话等.

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

也许应用程序生命周期中的这个图表会有所帮助.

UIKit事件循环.

在伪代码中,这归结为,

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

这些是iOS中的事件类型

UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
Run Code Online (Sandbox Code Playgroud)

因此,在处理完每次触摸,动作或远程控制事件后,池将被耗尽.