1

今日、コードのバグを検索していると、奇妙なことがわかりました。デバッガーで UIView インスタンスを検査すると、Xcode の変数ビューにUIViewクラスのサブビューメンバーが表示されません。

デバッガーには次のフィールドしか表示されません ( > は開始三角形を示す必要があります)。

  • UIレスポンダー

  • _層

  • _tabInfo

  • _gestureInfo

  • _touchData

  • _充電
  • _鬼ごっこ
  • _viewFlags

私は _subviews メンバーを欠いており、すべての位置メンバー (少なくとも 1 つは存在するはずです) についても考えるようになりました。

私が行方不明または間違っていることを誰かが知っていますか (この問題の Google 検索では結果が得られなかったので、問題ではないことがわかります)。

Xcode バージョン 3.1.3 を次のように使用します。

  • XcodeIDE: 1191.0
  • XcodeCore: 1192.0
  • Xcode サポート: 1186.0

OS 10.5.7 と iPhone SDK 2.2.1 を搭載した Mac (iPhone SDK 3.0 でもテストしました)。

誰かがこれについて何か知っていることを願っています。問題をデバッグするために知っておくべきことをデバッガーがすべて表示してくれるとは信じられないのではないかと、少し不思議な気持ちになります。そして、ツールを信用する必要がある場合は良くありません:(

4

1 に答える 1

2

デバッガーは、プロパティではなく、メンバーのみを表示できます。この 2 つは Objective C では異なることに注意してください。プロパティは、setter および/または getter のシンタックス シュガーにすぎません。したがって、UIView の読み取り専用の「サブビュー」プロパティは、このメソッドの実装があることのみを保証します。

- (NSArray *)subviews;

お気付きのように、Apple は、対応するプロパティ名に似ているが先頭にアンダースコアが付いた、文書化されていないメンバー変数を使用して、多くのプロパティを実装しています。これにより、一部のオブジェクトの内部をスパイして、場合によっては何が起こっているかを確認できますが、多くのプロパティはそのような透過的な方法で実装されていません。このような場合は、診断コードをアプリに挿入してプロパティにアクセスし、NSLog を使用してその戻り値を出力するか、デバッガーで観察できる一時変数に値を格納する必要があります。

貧弱なデバッガーを責めないでください。それはまさにそれがするように設計されていることをしています。それが助けになる場合は、実際にはメソッドであるのにメンバー変数であると私たちに思わせようとしているプロパティを非難することができます。

于 2009-09-02T07:22:52.403 に答える