为什么Xcode 4.2在main.m中使用@autoreleasepool而不是NSAutoreleasePool?

时间:2012-01-03 15:54:47

标签: ios xcode autorelease nsautoreleasepool

我注意到Xcode 4.2中有一种不同的方式来启动主要功能:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil,
                                 NSStringFromClass([PlistAppDelegate class]));
    }
}

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

有人知道这两者之间的区别吗?

1 个答案:

答案 0 :(得分:14)

第一个使用ARC,它在iOS5及更高版本中实现,为您处理内存管理。

在第二个问题上,您正在管理自己的内存并创建一个自动释放池来处理主函数内发生的每个自动释放。

因此,在阅读了有关iOS5的Obj-C的新内容后,看来:

@autoreleasepool {
    //some code
}

的作用相同
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// some code
[pool release];

区别在于最后一个会在ARC上抛出错误。

修改

第一个是否使用ARC。