0

セレクターに関するこの例で何が起こっているかについての私の理解を確認したかったのです。

Bar.m に arr というオブジェクトがあるNSArrayとします。FooFoo.m には(NSComparisonResult)compareFoo:メソッドがありますが、Foo.h ファイルで宣言するのを忘れています。それでも、[arr sortedArrayUsingSelector:@selector(compareFoo:)];コードを呼び出すと正常に実行されます。これは、オブジェクトである配列内のオブジェクトにメッセージcompareFoo:が送信されているためで、Foo.h で宣言されていなくてもFoo呼び出すことができますか?compareFoo:

これについて 100% 確信が持てなかったので、興味を持ちました。ありがとう!

4

1 に答える 1

1

Objective-C には動的型付けがあります。つまり、インターフェイスまたは .h ファイルで宣言しなくても、オブジェクトのインスタンスにメッセージを送信できます。これを行う方法は、セレクターを使用することです。

セレクターにはコンパイル時のチェックがありません。そのため、セレクターを正しく宣言すると、オブジェクトに存在しないメソッドに関する実行時エラーが発生することがあります。

于 2012-10-02T23:12:26.827 に答える