I just installed Xcode 4.6 and now I’m getting new errors in an ancient code I manage.
The compiler complains that “Direct access to objective-c’s isa being deprecated in favor of object_setClass() and object_getClass()” and th e project won’t build.
So please tell me, is:
object_setClass(self, [CustomClass class]);
the appropriate replacement of:
self->isa = [CustomClass class];
Thank you!
Accessing
isahas been deprecated for some time, the tools just didn’t tell you this. Notably, it’s been deprecated for at least as long as tagged pointers have existed in obj-c.And yes,
object_setClass()is the appropriate replacement.That said, why do you even need this? It’s extremely rare that replacing the class of an object is appropriate, and the only valid case I can think of is when you’re trying to dynamically subclass a class in order to inject new behavior into individual instances without modifying the class as a whole (which is, of course, something you probably don’t need to do).