0

Apple の Objective C ガイドによると、同じ名前のメソッドはすべて同じセレクターを使用し、戻り値の型とパラメーターが同じである必要があります。

次に、例外である「静的型付き」メソッドについて何かがあります。

つまり、セレクターを共有する同じ名前と戻り値の型 + パラメーターを持つメソッドですが、同じ名前であるが戻り値の型やパラメーターが異なる場合は、異なるセレクターを持ちます-そのようなメッセージを送信した場合それに...わかりません。

4

1 に答える 1

5

セレクターは、メソッドのシグネチャではなく、メソッド名を表します。次の例では:

- (void)someMethod:(int)intParam;
- (id)someMethod:(float)floatParam;

両方のメソッドは同じ名前(someMethod:)を持ち、その結果、同じセレクターになります@selector(someMethod:)

と呼ばれるクラスで最初のメソッドを宣言し、と呼ばれるFooクラスで2番目のメソッドを宣言したとしますBar。それで:

Foo *foo = …;
Bar *bar = …;

[foo someMethod:42];
[bar someMethod:3.1416f];

fooは静的に型付けされているため、どのメソッドを使用する必要があるかがコンパイラに明確であるため、「静的型付き」メソッド呼び出しの例ですbar

ここで、次のことを考慮してください。

id foobar = …;

[foobar someMethod:42];

foobarは一般的なObjective-Cオブジェクトタイプであるtypeを持っているためid、コンパイラには、呼び出されているメソッドを決定するための十分な情報がありません。これらの2つの方法のいずれかを選択します。これは、戻り値の型とパラメーターの型の違いによっては危険な場合があります。そのため、Appleは、同じ名前のメソッドにも同じシグネチャを付けることを推奨しています。Matt Gallagherは、Objective-Cでの弱い型付けの落とし穴についてのブログ投稿を書いています。

于 2011-07-07T09:43:43.520 に答える