在Xcode 4中将非ARC文件转换为ARC项目

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

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

迈克尔,

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

要回答你的具体问题:

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

你的一个非ARC超类的子类可以是ARC也可以不是。 由于您的应用程序的默认设置是ARC,您不需要为您的子类做任何事情。

安德鲁

是的,您需要添加非ARC标志( -fno-objc-arc )并retain / release呼叫。

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