Greg Parker of Sealie Software explains what Apple is up to with the extra
bits of the object
If it’s not a pointer anymore, what is it?
Some of the bits still encode the pointer to the object’s class. But neither
OS X nor iOS actually uses all 64 bits of virtual address space. The
Objective-C runtime may use these extra bits to store per-object data like
its retain count or whether it has been weakly referenced.
This reminds me of a conversation I had on Twitter with Graham Lee about
what the “_” prefix on ivars means to an Objective-C developer. It doesn’t mean
anything to me, other than Apple says we should do it—and so we should.
Apple’s been telling us not to modify the
isa pointer on objects directy for
a long time. If you thought, “Surey, I’m able. This is just C!”, then you’re in
for a world of pain on 64-bit ARM.
Apple’s style and usage guidelines may seem capricious, but they are often
subtle hints about where the language and platforms are going1. I’m all for
being clever, but a long lived iOS or OS X project have much less friction over
time if it avoids mucking with unofficial parts of the Objective-C runtime.
I’m looking at you, JSON Kit. :/