为什么Xcode 4.2在main.m中使用@autoreleasepool而不是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; } 

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

第一个是使用ARC,在iOS5及以上版本中实现,以处理你的内存pipe理。

第二个,你正在pipe理自己的内存,并创build一个autorelease池来处理你的主函数中发生的每一个autorelease。

所以在阅读了关于iOS5 Obj-C的新function之后,发现:

 @autoreleasepool { //some code } 

和…一样

 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // some code [pool release]; 

不同的是最后一个会在ARC上抛出一个错误。

编辑

第一个是使用ARC或不。