如何检测我拥有的对象是否真的是NSProxy?

时间:2011-07-16 01:59:57

标签: objective-c nsproxy

我在苹果API向我发出的一些更可疑的对象中略微探讨了一下(比如mutableArrayValueForKeyPath),它让我想知道苹果多久给我一个我认为是某个物体的东西,但实在是只是一个NSProxy,它秘密地通知其他对象,或过滤我的消息。

有没有办法判断一个对象是否是NSProxy的子类?他们似乎很擅长模仿他们所代表的任何东西。

2 个答案:

答案 0 :(得分:4)

您可以随时查看self->isa

答案 1 :(得分:3)

要判断它是否为NSProxy,请使用isProxy,请参阅the reference

但请注意,Apple使用了许多其他内部魔法,而不只是NSProxy。例如,要实现KVC / KVO,它们通常会创建一个匿名类,该类位于其自己的类中,将其插入到类层次结构中,并更改对象的标识。参见例如Mike Ash在此Friday Q&A article进行了精彩的讨论。 (顺便说一下,如果你对Objective-C运行时很好奇,那么你肯定应该阅读这篇博客。)

正如那里所写,揭示对象真实身份的最有力方法是使用运行时,请参阅here

    id obj;
    Class c=object_getClass(obj);

给你真正的课程。请注意,通过重新实现[obj class]

,对象可能会出现问题