2012-10-01 10 views
6

次のメソッドの定義は(アップルLLVM 4.1を使用して)コンパイルされたときに、私は驚いた:someArgumentのタイプが欠落しているのObjective-Cメソッドの構文

- (void) testMethod:someArgument { 

} 

注意してください。 Objective-Cのメソッド引数の型指定のルールは何ですか?

答えて

7

デフォルトの引数型はidです。でも、これはコンパイルされます:これは、引数としてidを取り、idを返すべき方法である

- testMethod:someArgument { 
} 

実際にではなく、さらにメソッド名が必要です。このすべてが非常に悪い習慣です。もちろん、

[self :someObject]; 

あなたは常に指定する必要があります:

- :someArgument { 
} 

これのように呼び出すことができますタイプ(および名前)。

+0

興味深い!私はObjective-Cが ' - :v {}'をコンパイルするのをもっと知っているのが好きです。 – SundayMonday

+2

このようなメソッドを使用する質問には、私は拒否します:-D – DrummerB

+1

そして、コンパイルする方法が最短の場合は、 '-a {}' ;-) – DrummerB

2

メソッド引数の "type"は、コンパイラと実行時メッセージの受け渡しの両方の型チェックに使用されます。

あなたのプロトタイプで呼び出されている方法は、 "(id)"と同じです。

詳細については、AppleのProgramming with Objective C documentの「メソッドがパラメータを取る」セクションを参照してください。 "The Objective-C Programming Language" documentの「オブジェクトメッセージング」セクションには、非常に役立つ情報もあります。

1

のObjective-Cプログラミング言語tells us:このような方法 戻り値としてのObjective-Cのオブジェクト指向コンストラクトについて

、IDは、AS INTを置き換えデフォルトのデータ型。 (関数の戻り値などの厳密には のC構文の場合、intはデフォルトの のままです)。

関連する問題