Abh*_*nav 7 iphone cocoa-touch objective-c nsautoreleasepool ios
据我所知,一旦自动释放的池被释放,自动释放的对象就会被清除.现在,自动释放池将在运行循环结束时释放.
我的问题是,如果在我的课程中,我没有创建自定义自动释放池并在该类中的某些对象上调用autorelease方法,那么这些对象将被恢复?"运行循环结束"是否暗示"应用程序结束"?
Anu*_*rag 21
您必须了解运行循环的概念.iOS中的运行循环等待某些事件发生,然后它就会对其起作用.该事件可能是用户触摸屏幕,接听电话等.
对于iOS处理的每个此类事件,在开始时创建新的自动释放池,并在事件处理完成时将其耗尽.从理论上讲,Cocoa Touch可以创建任意数量的嵌套自动释放池,但您应该知道的主要是事件循环.
也许应用程序生命周期中的这个图表会有所帮助.
.
在伪代码中,这归结为,
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)
因此,在处理完每次触摸,动作或远程控制事件后,池将被耗尽.