在Xcode 4中将非ARC文件子类化到ARC项目中

3
我在我的ARC项目中使用了一些非ARC代码,即Three20。我已经添加了所有适当的编译器标志,并且一切正常。然而,我需要对一些Three20类进行子类化,我不确定是否应该为新文件添加非ARC的编译器标志,或者编译器是否会自动添加适当的释放调用。
简要概括一下: - XCode 4中的ARC项目 - 包含非ARC代码(Three20) - 需要对非ARC文件中定义的内容进行子类化 - 我需要添加释放调用吗? - 在子类中需要添加非ARC的编译器标志吗?
2个回答

8

迈克尔,

ARC是一种编译时技术,它根据内存中的某个插槽是否超出当前方法/函数调用来确定保留/释放语义。因此,您可以安全地混合使用ARC或非ARC子类。我经常这样做,也在分类中这样做。与垃圾回收不同,ARC非常专注于每个方法/函数中的存储空间。顺便说一句,大多数iOS框架似乎尚未使用ARC。因此,您制作的任何框架类的子类都有这个“问题”,但这并不是问题。

回答你的具体问题:

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

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

安德鲁


2
是的,你需要添加非ARC标志(-fno-objc-arc)以及retain/release调用。
如果你的子类使用了ARC,则不要添加它,但我建议不要这样做,因为这只会引起麻烦。

1
为什么会有麻烦呢?每当有人创建一个启用ARC的UIViewController子类时,他们就在这样做。ARC是基于文件而不是基于类或类层次结构的。因此,使用非ARC基类创建ARC子类根本没有任何问题。 - BJ Homer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接