10

最近、iPhone プロジェクトで合成インスタンス変数を使い始めました。問題は、合成された ivar がデバッガーに表示されないことです。明示的に宣言されたインスタンス変数を使用していないときに、デバッガーでオブジェクトのプロパティを表示する方法はありますか?


2番目の質問を明確にする必要があります。プロパティにアクセスする方法やプロパティが何をするかについて質問しているわけではありません。私はそのすべてを知っています。この投稿に基づいて、合成されたivarを使用すると、インスタンス変数に直接アクセスできないという印象を受けました。以前は不可能だと思っていたことが明らかに可能になりました。何が起こっているのだろうと思います。

Xcode 3.2.4/iPhone Simulator/LLVM Compiler 1.5 を使用しています。

4

3 に答える 3

9

2番目の部分に回答を追加するために編集されました:

これは Xcode 3.1 で動作するため、それ以降のバージョンで動作しない理由がわかりません

できることは、デバッグ中にコンソールからオブジェクトに直接メッセージを送信することです。

ブレークポイントで停止し、デバッグ ビューで変数を見ているとします。オブジェクトの場合、これらはポインターを示します。iVar は表示されない場合がありますが、オブジェクトへのポインターがあり、メッセージを送信できます。例えば:

  • オブジェクト内のブレークポイントで停止しました
  • 変数 view はselfto be (say)のポインタアドレスを示しています0x1031380
  • コンソール タイプpo [0x1031380 title]で (セミコロンがないことに注意してください)、次のように入力します。
  • コンソールに必要なものが表示されるはずです。

プロパティを宣言し(retain)、その後プロパティを合成すると、渡されたオブジェクト/値を保持するセッターが作成されます。したがって、上記の場合、メソッドを次のように書き直す必要があります。

- (void)viewDidLoad {
    self.title = @"woah";
}

また、文字列はセッターの一部として保持されます。また、(copy)可変/不変のペア ( NSStringNSSetNSArrayなど) を持つクラス クラスターに使用することを好みます。そうすれば、プロパティを外部から変更することはできません。

于 2010-07-17T04:46:00.130 に答える
5

変数のポインター/アドレスを使用する必要はありません。代わりに、次のように変数名を使用できます。

po [myVar title]

変数がスコープ内にある場合、xcode は変数名 (上記の myVar) を入力するのに役立ちます。

于 2012-02-29T05:50:07.273 に答える
0

手動で入力したくない場合po [blahblah]は、ヘッダーでインスタンス変数を明示的に宣言するか、「デバッグ変数領域で「自己」を右クリックして「式の追加」を選択します。次に「_wordLength」と入力すると、ivar が表示されます"

于 2012-08-02T21:40:39.147 に答える