2

Apple API から渡された、より疑わしいオブジェクト (mutableArrayValueForKeyPath など) を少し調べてみたところ、特定のオブジェクトであると思われるものを Apple がどのくらいの頻度で提供してくれるのか疑問に思いましたが、実際には単なる NSProxy です、密かに他のオブジェクトにも通知したり、メッセージをフィルタリングしたりしています。

オブジェクトが NSProxy のサブクラスであるかどうかを確認する方法はありますか? 彼らは、彼らが表すものを正確に模倣するのが得意なようです.

4

2 に答える 2

4

あなたはいつでも見ることができますself->isa

于 2011-07-16T09:04:51.437 に答える
3

かどうかを判断するにNSProxyは、 を使用します。リファレンスisProxyを参照してください。

しかし、Apple はNSProxy. たとえば、KVC/KVO を実装するために、多くの場合、独自のクラスに関する匿名クラスを作成し、それをクラス階層に挿入して、オブジェクトの ID を変更します。たとえば、この金曜日の Q&A 記事で、Mike Ash による素敵な議論を参照してください。(ちなみに、Objective-C ランタイムに興味がある場合は、このブログを必ずお読みください。)

そこに書かれているように、オブジェクトの真の ID を明らかにする最も確実な方法は、ランタイムを使用することです。ここを参照してください。

    id obj;
    Class c=object_getClass(obj);

真のクラスを提供します。オブジェクトは、再実装することで嘘をつくことができることに注意してください[obj class]!

于 2011-07-16T05:17:39.963 に答える