为什么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或不。