【问题标题】:Different memory management ARC / no ARC不同的内存管理 ARC/无 ARC
【发布时间】:2011-11-14 02:23:23
【问题描述】:

我必须将简单的 ARC 代码转换为非 ARC。虽然它相对简单,但我错过了实例变量赋值 self.var = xxx,而是写了 var = xxx。

虽然在 ARC 版本中它没有造成任何问题 - 在非 ARC 版本中它肯定会导致崩溃。

这是否意味着实际上可以在没有 self 的情况下在 ARC 中分配实例变量。所以他们被保留了?

谢谢!

ps 学习如何在 ARC 中编程的最佳资源是什么,这样可以避免明显的错误 - 到目前为止,我没有发现任何问题,但我很担心我可能会错过一些东西

【问题讨论】:

  • 是的,我明白了——但这不是关于 iOS5,而是关于 ARC——而且 ARC 已经由 LLVM 3.0 发布了......所以我认为可以问
  • 我的错。不知道 :-) 我会删除我的评论。
  • NDA 下的 ARC 实施细节不是吗?
  • 不,ARC 是公开可用的 - (这里:clang.llvm.org/docs/AutomaticReferenceCounting.html)。苹果刚刚在新版本中使用了它。我希望我不是一个人在使用它......
  • 好的,我的错误... :) 感谢您的链接。就个人而言,我不使用它,因为我更喜欢自己管理内存......但这是另一个问题。

标签: iphone memory-management automatic-ref-counting


【解决方案1】:

这是否意味着实际上可以在没有 self 的情况下在 ARC 中分配实例变量。所以他们被保留了?

是的,有点。

id obj_;

与此相同。

id __strong obj_;

obj_ 对分配的对象具有强引用。在 ivar 的所有者对象被解除分配之前,分配的对象不会被解除分配。

请参阅LLVM document 或仍在 NDA 下的 Apple ARC 参考。

【讨论】:

    【解决方案2】:

    自动引用计数禁止“dealloc”的显式消息发送

    我分享了一个在新的 iOS5 SDK 中启用旧库编译的技巧。

    点击项目。

    点击目标。

    选择构建阶段选项卡。

    选择要关闭 ARC 的多个文件。

    按 ENTER / 按 Enter 键

    键入“-fno-objc-arc”(不带引号,如图所示)

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2013-06-08
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多