将非ARC文件子类化为Xcode 4中的ARC项目

时间:2012-01-09 15:17:02

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

我在ARC项目中使用了一些非ARC代码,即Three20。我添加了所有适当的编译器标志,一切正常。但是,我需要继承一些Three20类中的一些,并且我不确定是否应该将编译器标志添加到非ARC的新文件中,或者如果编译器将其解决,并添加适当的释放调用。

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

2 个答案:

答案 0 :(得分:8)

迈克尔,

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

回答您的具体问题:

  

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

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

安德鲁

答案 1 :(得分:2)

是的,您需要添加非ARC标记(-fno-objc-arc)和retain / release来电。

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