【问题标题】:Subclass non-ARC file into ARC project in Xcode 4在 Xcode 4 中将非 ARC 文件子类化为 ARC 项目
【发布时间】:2012-01-09 15:17:02
【问题描述】:

我在我的 ARC 项目中使用了一些非 ARC 代码,即 Three20。我已经添加了所有适当的编译器标志并且一切正常。但是,我需要子类化一些 Three20 类,我不确定是否应该将编译器标志添加到非 ARC 的新文件中,或者编译器是否会弄清楚,并添加适当的发布调用。

回顾一下: - XCode 4 中的 ARC 项目 - 包括非 ARC 代码 (Three20) - 需要对非 ARC 文件中定义的内容进行子类化 - 我需要添加发布调用吗? - 我需要在子类中为非 ARC 添加编译器标志吗?

【问题讨论】:

    标签: objective-c ios xcode three20 automatic-ref-counting


    【解决方案1】:

    迈克尔,

    ARC 是一种编译时技术,它根据内存中的给定槽是否会在当前方法/函数调用之后持续存在来确定保留/释放语义。因此,您可以使用 ARC 安全地混合子类,也可以不使用。我一直都这样做。我也在类别中这样做。与垃圾收集不同,ARC 非常关注每个方法/函数中的存储空间。顺便说一句,iOS 的大多数框架似乎还没有使用 ARC。因此,您为框架类创建的任何子类都有这个“问题”,这不是问题。

    回答您的具体问题:

    回顾一下: - XCode 4 中的 ARC 项目 - 包括非 ARC 代码 (Three20) - 需要对非 ARC 文件中定义的内容进行子类化 - 我是否 需要添加释放调用? - 我需要添加编译器标志吗 子类中的非 ARC?

    非 ARC 超类的子类可以是 ARC,也可以不是。由于您的应用的默认设置是 ARC,因此您无需对子类执行任何操作。

    安德鲁

    【讨论】:

      【解决方案2】:

      是的,您需要添加非 ARC 标志 (-fno-objc-arc) 和 retain / release 调用。

      如果您的子类确实使用 ARC,请不要添加它,但我建议不要这样做,因为它只会自找麻烦。

      【讨论】:

      • 为什么会自找麻烦?每当有人创建启用 ARC 的 UIViewController 子类时,他们都会这样做。 ARC 是在每个文件的基础上完成的,而不是在每个类或每个类层次结构的基础上完成的。因此,制作非 ARC 基类的 ARC 子类完全没有问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多