可可中的默认NSAutoreleasePool?

pro*_*eek 0 cocoa objective-c autorelease

我询问了NSAutoreleasePool,并了解在这种情况下我需要显式分配自动释放池.

int main()
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // Create an array
    NSArray *month = [NSArray arrayWithObjects:@ ... nill];

    [pool drain];
}
Run Code Online (Sandbox Code Playgroud)

在我的另一个问题中,我不需要发布NSArray,因为它将被自动释放.

- (NSArray*) getTodayArray
{

    ...

    NSArray *res = [NSArray arrayWithObjects: year, month, nil];

    return res;
}
Run Code Online (Sandbox Code Playgroud)

为了成为自动释放的对象,即使我没有创建任何NSAutorelease,也应该default在Cocoa中分配一些自动释放池.Xcode生成的主要功能非常简单.

int main(int argc, char *argv[])
{
    return NSApplicationMain(argc,  (const char **) argv);
}
Run Code Online (Sandbox Code Playgroud)

这是对的吗?如果是的话,何时以及如何分配?

Dav*_*ong 6

主线程每次"循环"时都会NSRunLoop创建并销毁NSAutoreleasePool它.但请注意,当您拆分任何后台线程时,您需要为它创建一个自动释放池(因为默认情况下,辅助线程没有活动的运行循环).