objective-c - ARC、非 ARC 和继承

标签 objective-c ios automatic-ref-counting

我还没有使用过 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/

相关文章:

ios - 为什么这个 Actor 在 ARC 下不需要桥接?

objective-c - ARC,核心数据和多线程,ARC释放对象

iphone - 如何检查 NSMutableArray 是否包含值(null)?

objective-c - 高级 iPad 编程

objective-c - iPhone中的低通滤波器

ios - 按比例调整正方形图像的大小

ios - 将 Objective-C block 定义为属性 - 最佳实践

objective-c - 是否可以在编译时看到ARC生成的代码?

objective-c - 如何从 NSUserDefaults 中的对象获取 key ?

ios - AFHTTPSessionManager 使用基于 SOAP 的服务