【问题标题】:What iOS version is required to use @autoreleasepool?使用@autoreleasepool 需要什么iOS 版本?
【发布时间】:2012-01-14 16:50:45
【问题描述】:

当我在 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 中支持?那么在哪里可以查看这个关键字的版本信息呢?

【问题讨论】:

标签: ios cocoa-touch version nsautoreleasepool


【解决方案1】:

你指的是@autoreleasepool吗?

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

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

【讨论】:

  • @autoreleasepool 不需要 ARC。见..stackoverflow.com/q/7950583/927947
  • 啊,有趣的是,已经更新了我的答案以纠正这个问题,并突出显示链接文档的关键部分,在第一次阅读时可能会被误解......就像我一样。 :)
【解决方案2】:

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

【讨论】:

  • 确实如此,刚刚在我的iPhone 3G iOS 3.1.3上试过,没问题
【解决方案3】:

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

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

【讨论】:

  • 我遇到了完全相同的问题,这也为我解决了问题
猜你喜欢
  • 2016-08-03
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2018-09-08
  • 2017-02-12
  • 2023-03-30
相关资源
最近更新 更多