什么iOS版本需要使用@autoreleasepool?

时间:2011-12-07 05:36:43

标签: ios cocoa-touch version nsautoreleasepool

当我在iOS 4.3.x上使用@autorelease关键字运行代码时,会抛出此错误。

dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush
  Referenced from: /Users/Eonil/Library/Application Support/iPhone Simulator/4.3.2/Applications/3782382E-293A-4D5E-86E6-28BE35CF6048/EonilCocoaComplementsTester.app/EonilCocoaComplementsTester
  Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation

dyld: Symbol not found: _objc_autoreleasePoolPush
  Referenced from: /Users/Eonil/Library/Application Support/iPhone Simulator/4.3.2/Applications/3782382E-293A-4D5E-86E6-28BE35CF6048/EonilCocoaComplementsTester.app/EonilCocoaComplementsTester
  Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation

我认为关键字只是替代显式自动释放池创建/删除。无论如何它不是,并抛出一个错误。它仅支持特定版本的iOS吗?那么我在哪里可以查看有关此关键字的版本信息?

3 个答案:

答案 0 :(得分:4)

你指的是@autoreleasepool?

如果您使用的是Xcode 4.2和iOS 5 SDK,则可以在具有iOS 4.3.x构建目标的应用中使用@autoreleasepool。尽管transitioning to ARC guidelines声明“ARC在@autoreleasepool中引入了一个语句构造到Objective-C语法”,这可能表明需要ARC,但它继续说,“这种语法在所有Objective-C中都可用模式“。

虽然我不认为这是特别清晰的文档,但这意味着如果你使用iOS 5 SDK,你可以使用带有和不带ARC的@autoreleasepool语法。

答案 1 :(得分:3)

在运行iOS3.0的第一代iPhone上测试了@autoreleasepool {} - 没有问题

答案 2 :(得分:3)

似乎是模拟器中的一个错误。

将部署目标设置为4.2而不是4.2.1对我有效。

enter image description here