【问题标题】:Compiler error when trying to use release method尝试使用发布方法时出现编译器错误
【发布时间】:2012-10-07 18:17:04
【问题描述】:

这让我有点困惑,因为我正在阅读 2009 年的 Objective-C 书籍(这是我的图书馆唯一的版本)并且作者不断提醒读者释放内存,但是当我尝试释放内存时出现错误使用这种方法。我阅读了一些关于它的内容,发现 release 方法已被弃用,但是我需要做些什么来代替 release 方法来管理内存,或者 Objective-C 现在有垃圾收集吗?

例如:

NSString *s = [[NSString alloc] init];
[s release];

【问题讨论】:

  • 关闭 ARC 并先学习旧的东西,还是打开 ARC 并学习新的范例更好,这有点 50/50。了解旧方案很好,因为您可以更好地了解 ARC 在“幕后”所做的事情——这些东西可以在您拍摄与内存管理相关的错误时为您提供帮助(并且在您尝试了解一些 ARC 接口和术语)。但是学习旧东西确实需要付出很大的努力/耐心——而不是立即满足。
  • 同意 Hot Licks,尽管我什至认为它是 51/49 以支持使用 ARC。您还需要学习许多其他框架知识,而 ARC 可能只会有所改进。对我来说,当你掌握了其他一切后,回去学习内存管理似乎是一条好路。

标签: objective-c memory-management compiler-errors


【解决方案1】:

这不是垃圾回收,而是 Automatic Reference Counting (ARC) 为您工作。

要遵循书中的示例,请在 Xcode 中创建一个新项目并取消选择使用 ARC 的选项。

【讨论】:

  • 谢谢。您是否建议我禁用它以遵循书中的示例,还是应该利用 ARC?
  • 如果这是您的第一本书,我建议禁用 ARC 以亲身了解内存管理的含义。一旦您了解幕后发生的事情,就可以(实际上很酷)打开 ARC。
  • 我有使用 Java 的经验,但到目前为止还没有内存管理经验,所以我将禁用 ARC。谢谢
【解决方案2】:

您已启用 ARC;编译器会自动插入对retainrelease 的调用。如果您想手动进行内存管理,请在目标的构建设置中禁用 ARC。在 OS X 上,也有垃圾收集,但已被弃用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多