-1

状況は次のとおりです。UITextViewをメンバーとして使用してカスタムビュークラスを作成しました。何らかのイベントが発生した後、最初のレスポンダーとしてtextViewを作成します。

@inteface MyCustomView : UIView{
   UITextView* textView;
}

- (void) doSomething;

@end

プログラムの実行中に、[doSomething]メッセージをMyCustomViewのインスタンスに送信します。

[myCustomViewInstance doSomething];

何が起こるかは非常に興味深いです、UITextView:doSomethingが認識されないセレクターであると文句を言うことによってプログラムがクラッシュします。

プログラムがMyCustomViewのインスタンスではなくUITextView(そのメンバー変数)でdoSomethingを呼び出すのはなぜですか。

ここで何が間違っている可能性がありますか?(もちろん、これは私が行っていることの標準バージョンですが、論理的なエラーシナリオでは、コンパイラレベルで何かが台無しにされない限り、これが当てはまる可能性があることを理解していません)

さらに調査する必要があると思いますか?

4

1 に答える 1

3

まず、Objective-Cには「メンバー」変数がなく、インスタンス変数があります。ささいなこと; しかし、用語は重要です。

次に、がサブクラスではなくmyCustomViewInstanceのインスタンスを指しているため、クラッシュが発生しています。UITextViewこれは、誤ってそのような割り当てを行ったことが原因であるか、オーバーリリースの問題があり、偶然にその変数が間違ったオブジェクトを指していることが原因である可能性があります。

最後に、コンパイラのバグは確かにありますが、そのような単純なコードがこれまで知られていなかったコンパイラのバグを明らかにする可能性はほとんどありません。使用しているコンパイラは、OSの数百万行のコードをコンパイルするために使用されているものとまったく同じです。このような単純なバグは、アプリが機能しないか、デバイスが起動しないことを意味する可能性が非常に高くなります。

これは、上記のコード行が実際にクラッシュしていることを前提としています。

于 2012-05-20T00:25:50.020 に答える