2012-01-09 69 views
3

我在ARC项目中使用了一些非ARC代码,即Three20。我已经添加了所有适当的编译器标志,并且一切正常。但是,我需要继承一些Three20类,并且我不确定是否应该将编译器标志添加到用于非ARC的新文件中,或者编译器会计算出它,然后添加适当的发布调用。将非ARC文件转化为Xcode 4中的ARC项目

只是为了回顾: - XCode中4 ARC项目 - 包括非ARC码(Three20) - 需要继承非ARC定义 文件的东西 - 我需要补充呼吁释放? - 我需要为子类中的非ARC添加编译器标志吗?

回答

2

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

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

+1

为什么会要求麻烦?任何时候有人制作一个支持ARC的'UIViewController'子类,他们就是这么做的。 ARC是基于每个文件完成的,而不是每个类或每个类的层次基础。因此,在制作非ARC基类的ARC子类方面存在* no *问题。 – 2012-01-10 20:07:32

8

迈克尔,

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

为了回答您的具体问题:

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

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

安德鲁

相关问题