据我了解,一旦自动释放池被释放,自动释放的对象就会被清理。现在,自动释放池将在运行循环结束时释放。
我的问题是,如果在我的类中我没有创建自定义自动释放池并对该类中的某些对象调用自动释放方法,那么这些对象在什么时候会被恢复? “运行循环结束”是否意味着“应用程序结束”?
您必须了解运行循环的概念。 iOS 中的运行循环等待某个事件发生,然后对其采取行动。该事件可能是用户触摸屏幕、接听电话等。
对于 iOS 处理的每个此类事件,new自动释放池在开始时创建,并在事件处理完成时耗尽。理论上,Cocoa Touch 可以创建任意数量的嵌套自动释放池,但您应该了解的主要一个是事件循环。
也许这张图来自应用程序生命周期会有帮助的。
.
在伪代码中,这可以归结为,
int UIApplicationMain(...) {
while (!shouldQuitApplication) {
Event *someEvent = // wait for next event;
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
// handle event
[myPool release];
}
}
这些是 iOS 中的事件类型
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
因此,在处理每个触摸、运动或远程控制事件后,池将被清空。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)