我还没有使用过 ARC,只是在它通过第 3 方代码强制进入项目时处理它。我已经阅读了所有 ARC 文档,但还没有看到这个问题的答案:
如果我在使用 -fobjc-arc
编译的模块中定义了一个类,我能否在不支持 ARC 的模块中从中派生一个新类?
在我看来,只要派生类不尝试触及根类中的任何 ivar,它就应该可以正常工作。在我看来,即使有一个调用 [super dealloc]
的 dealloc 方法在派生类中也没有问题。
反过来呢?我可以从非 ARC 类派生出支持 ARC 的类吗?应该也能正常工作吧?
加分项:在混合 ARC 和非 ARC 代码时是否有我应该让自己意识到的问题?
最佳答案
我没有发现任何问题。您必须意识到 ARC 类似于源代码预处理器,在编译期间为您添加内存管理调用。当您到达链接阶段时,您无法真正区分 ARC 代码和非 ARC 代码。 (这可能是一种过度简化,但应该适合您的目的。)如果您的派生类具有正确的内存管理并且父类(super class)具有正确的内存管理,那么结果将正常工作。
我能想到的唯一区别是处理 weak
属性。但我对这些了解不多,无法说明是否有可能使用具有弱属性的 ARC 和 MRC 代码的某种组合来获得有缺陷的代码。
关于objective-c - ARC、非 ARC 和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018137/