I'm poking around a bit in some of the more suspicious objects apple APIs hand out to me, (like mutableArrayValueForKeyPath) and it got me wondering how often apple gives me what I believe to be a certain object, but is really just an NSProxy, which is secretly also notifying other objects, or filtering my messages.
Is there a way to tell if an object is a subclass of NSProxy? It seems like they are pretty good at exactly imitating whatever they represent.
To tell if it's an
NSProxy
or not, useisProxy
, see the reference.But note also that Apple uses many other internal magics, not just
NSProxy
. For example, to implement KVC/KVO, they often create an anonymous class which lies about its own class, insert it into the class hierarchy, and change an object's identity. See e.g. a nice discussion by Mike Ash at this Friday Q&A article. (You should definitely read this blog if you're curious about Objective-C runtime, by the way.)As written there, the most robust way to reveal the true identity of an object is to use the runtime, see here.
gives you the true class. Note that an object can lie what it is by re-implementing
[obj class]
!