Objective c Cocoa touch中的主要自动释放池何时排空? #导入 int main(int argc,char*argv[]){ NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init]; int retVal=UIApplicationMain(argc,argv,nil,nil); [池释放]; 返回返回; }

Objective c Cocoa touch中的主要自动释放池何时排空? #导入 int main(int argc,char*argv[]){ NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init]; int retVal=UIApplicationMain(argc,argv,nil,nil); [池释放]; 返回返回; },objective-c,cocoa-touch,autorelease,Objective C,Cocoa Touch,Autorelease,main方法在应用程序退出后调用池上的release,这会顺便将release发送给池中的所有对象。但是,由于在应用程序内部创建的自动释放对象在应用程序退出之前不会一直存在,因此在运行循环期间的某个时刻,池要么被排空,要么被释放(在iPhone的上下文中,drain==release..,除非我需要在这一点上进行更正!)。但有人能确定这是什么时候发生的吗?在运行循环结束时将池中的水排干,并在下一个循环开始时分配一个新的池似乎是合乎逻辑的,但我找不到任何关于这方面的确切信息。在苹果论坛上,但这似乎

main方法在应用程序退出后调用池上的release,这会顺便将release发送给池中的所有对象。但是,由于在应用程序内部创建的自动释放对象在应用程序退出之前不会一直存在,因此在运行循环期间的某个时刻,池要么被排空,要么被释放(在iPhone的上下文中,drain==release..,除非我需要在这一点上进行更正!)。但有人能确定这是什么时候发生的吗?在运行循环结束时将池中的水排干,并在下一个循环开始时分配一个新的池似乎是合乎逻辑的,但我找不到任何关于这方面的确切信息。在苹果论坛上,但这似乎是高度投机性的(更不用说最后的争议了)。 有谁能给我一个答案,最好是有文档或源代码(甚至是实验程序)的证据吗?

来自:

应用程序工具包在事件循环的每个周期开始时在主线程上创建一个自动释放池,并在结束时将其耗尽,从而释放在处理事件时生成的所有自动释放对象


您引用的特定池直到应用程序结束时才被耗尽,但每次调用运行循环都会创建自己的池,嵌套在应用程序的运行循环中。这很有意义。因此,如果我从不创建自己的池,那么默认情况下,给定的应用程序将有两个嵌套池?是的;运行循环中的外部池和循环池。UIApplicationMain()也可以创建/排出池作为实现细节。如果有任何疑问,NSAutoreleasePool文档的OS X版本和iOS版本都包含此语句,因此显然它在两种平台上都适用。
#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}