ARC,非ARC和继承

Tom*_*ift 5 objective-c ios automatic-ref-counting

除了通过第三方代码强行进入项目之外,我还没有使用过ARC.我已经阅读了所有ARC文档,但没有看到这个问题的答案:

如果我有一个在编译的模块中定义的类,-fobjc-arc我可以在一个未启用ARC的模块中从中派生一个新类吗?

在我看来,只要派生类不试图触及根类中的任何ivars,它应该可以正常工作.在我看来,即使有一个dealloc方法调用[super dealloc]在派生类中也没问题.

那么,另一种方式呢?我可以从非ARC类派生一个启用ARC的类吗?应该也可以正常工作,对吧?

加分点:在混合使用ARC和非ARC代码时,有什么问题我应该让自己知道吗?

zou*_*oul 6

我没有发现任何问题.您必须意识到ARC类似于源代码预处理器,在编译期间为您添加内存管理调用.当您到达链接阶段时,您无法从非ARC代码中真正告知ARC代码.(这可能是一个过度简化,但应该适用于您的目的.)如果您的派生类具有正确的内存管理并且超类具有正确的内存管理,则结果将正常工作.

关于我能想到的唯一区别是weak物业的处理.但我不知道那些人是否可以使用具有弱属性的ARC和MRC代码的某种组合来获得有缺陷的代码.