0

そのため、使用しているサンプルコードで使用しているプロパティがいくつかあります。特に、UIViewクラスの「tag」プロパティ。ここで、このプロパティを設定しますNSLog。または、タグの値に基づいて制御ステートメントを設定すると、設定した値がそこにあり、期待どおりに実行されていることがわかります。

ただし、マウスを.tagに合わせて、そこにあるタグ値を確認すると、Xcodeから何も取得されません。値を示すポップアップは表示されません。次に、auto / local / allウィンドウに移動し、「式の追加...」を試みます(これが、従来の「監視」変数を設定する唯一の方法のようです。別の方法がある場合は、お知らせください)。とにかく、object.tagを「監視」ウィンドウに配置しましたが、空白になっています。値なし。ゼロではなく、存在しなかったかのように何もありません。

もちろん、「object.tag」の「object」部分にマウスを合わせると、開示用の三角形が付いたオブジェクトのポップアップが表示され、展開してから「_tag」を探します(基になるインスタンス変数)。

では、これについて何がそんなに難しいのでしょうか?タグプロパティにカーソルを合わせるだけで、デバッグ中にタグプロパティが表示されないのはなぜですか?これはXcode開発のプロパティと関係がありますか?

Xcode4.3.2を実行しています

4

1 に答える 1

1

このtagプロパティは、他のObjective-Cプロパティと同様に、構文糖衣です。実際、プロパティはアクセサメソッドとして実装され、アクセサメソッドはobjc_msgSend()関数呼び出しに変換されます。この機械は、構造体フィールドにアクセスするようなものではありません。

デバッガーは、基本的に、特別な知識を必要とせず、結果をもたらさないため、構造体の任意のフィールドを表示できます。構造体の定義のみが必要です。一方、Objective-Cプロパティの値を取得するには、プロセスコンテキストでコードを実行する必要があります。これはデバッガコンソールで手動で行うことができますが、デバッガはこれを自動的に行いません。

これは、孤立したケースでも理論的には可能だと思いますが、信じられないほど難しいです。アクセサメソッドを実行すると、オブジェクトの内部状態が変化する場合を考えてみます。たとえば、呼び出す-[UIViewController view](そのプロパティにアクセスするview)と、ビューが読み込まれます。呼び出されるデリゲートメソッドなどもある場合があります。そのような場合、IDEのプロパティにマウスを合わせると、プロセスの実行状態が変更され、デバッグ自体が冗談になります。

于 2012-04-05T20:31:46.933 に答える