Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ARC, non-ARC, and inheritance

I haven't used ARC yet other than to deal with it when it forces it's way into a project via 3rd party code. I've read all the ARC docs but haven't seen an answer to this question:

If I have a class that's defined in a module compiled with -fobjc-arc, can I derive a new class from this in a module that is NOT ARC-enabled?

In my mind it should work fine as long as the derived class doesn't attempt to touch any ivars in the root class. It seems to me that even having a dealloc method that calls [super dealloc] would be fine in the derived class.

And, what about the other way around? Can I derive a ARC-enabled class from a non-ARC class? Should work fine too, right?

Bonus points: are there any gotcha's when mixing ARC and non-ARC code that I should make myself aware of?

like image 517
TomSwift Avatar asked Jun 13 '12 15:06

TomSwift


1 Answers

There are no issues that I am aware of. You have to realize that ARC is something like a source code preprocessor, adding the memory management calls for you during the compilation. When you arrive at the linking phase, you can’t really tell ARC code from non-ARC code. (This is probably an over-simplification, but one that should work for your purposes.) If your derived class has correct memory management and the super class has correct memory management, the result will work fine.

About the only difference I can think of is handling of weak properties. But I don’t know enough about those to say if it’s possible to arrive at buggy code using some combination of ARC and MRC code with weak properties.

like image 58
zoul Avatar answered Sep 28 '22 09:09

zoul