ios – 为什么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,nil);
    [pool release];
    return retVal;
}

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

解决方法

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

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

所以在阅读了有关iOS 5的Obj-C新功能之后,看来:

@autoreleasepool {
    //some code
}

工作方式相同

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

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

编辑:

一个是使用ARC.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...