Cocoa-touch中的主要自动释放池何时耗尽?

时间:2011-02-09 23:52:25

标签: objective-c cocoa-touch autorelease

#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;
}

主应用程序在应用程序退出后调用池上的释放,这会偶然地将释放发送到池中的所有对象。但是因为应用程序内部创建的自动释放对象在应用程序退出之前不会停留,所以在runloop期间的某个时刻,池要么被耗尽要么被释放(在iPhone的情况下,排除==释放..除非我需要纠正了这一点!)。但有人知道这种情况何时发生?在runloop结束时将池耗尽,并且在下一个开始时分配新的池似乎是合乎逻辑的,但我找不到任何关于此的确切信息。 Here's a discussion在苹果论坛上,但似乎是高度投机的(更不用说有争议的,到最后)。 任何人都可以给我一个答案,理想情况下是来自文档或源代码(甚至是实验程序)的证据吗?

1 个答案:

答案 0 :(得分:11)

来自NSAutoreleasePool Class Reference

  

Application Kit在事件循环的每个循环开始时在主线程上创建一个自动释放池,并在最后将其排出,从而释放处理事件时生成的任何自动释放的对象。