【问题标题】:Why does Xcode 4.2 use @autoreleasepool in main.m instead of NSAutoreleasePool?为什么 Xcode 4.2 在 main.m 中使用 @autoreleasepool 而不是 NSAutoreleasePool?
【发布时间】:2012-02-01 15:31:10
【问题描述】:

我注意到在 Xcode 4.2 中有一种不同的方式来启动 main 函数:

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;
}

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

【问题讨论】:

标签: ios xcode autorelease nsautoreleasepool


【解决方案1】:

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

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

所以在阅读了一些关于 iOS5 的 Obj-C 的新功能之后,似乎:

@autoreleasepool {
    //some code
}

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

不同的是,最后一个会在 ARC 上引发错误。

编辑

第一个是否使用ARC。

【讨论】:

  • 请注意,@autoreleasepool 是 Objective-C 中可用的一种新语句,无论 ARC 是什么都可以使用。见12
  • @autoreleasepool 是现在要走的路。摘自 Apple 的“过渡到 ARC 发行说明”:此语法适用于所有 Objective-C 模式。它比使用NSAutoReleasePool 类效率更高;因此,我们鼓励您采用它来代替 NSAutoReleasePool
  • 所以这个答案是错误的。 “第一个正在使用 ARC”它可能没有使用 ARC
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2012-02-26
  • 2018-08-20
相关资源
最近更新 更多