次のメソッド定義がコンパイルされたときは驚きました (Apple LLVM 4.1 を使用)。
- (void) testMethod:someArgument {
}
someArgument
の型が欠落していることに注意してください。メソッド引数の型を指定することに関するObjective-Cのルールは何ですか?
次のメソッド定義がコンパイルされたときは驚きました (Apple LLVM 4.1 を使用)。
- (void) testMethod:someArgument {
}
someArgument
の型が欠落していることに注意してください。メソッド引数の型を指定することに関するObjective-Cのルールは何ですか?
デフォルトの引数タイプはid
です。これでもコンパイルされます:
- testMethod:someArgument {
}
これは、id
引数として を受け取り、 を返すメソッドid
です。
実際には、メソッド名さえも必要ありません:
- :someArgument {
}
これは次のように呼び出すことができます。
[self :someObject];
もちろん、これはすべて非常に悪い習慣であり、常に型 (および名前) を指定する必要があります。
言語仕様の状態:
戻り値またはパラメーターの型が明示的に宣言されていない場合は、メソッドとメッセージの既定の型 (id) と見なされます。
メソッド引数の「型」は、コンパイラによる型チェックとランタイム メッセージ パッシングの両方に使用されます。
プロトタイプで呼び出されている方法は、「(id)
」と同等です。
詳しくは、Apple のProgramming with Objective C ドキュメントの「Methods can take Parameters」セクションを参照してください。「The Objective-C Programming Language」ドキュメントの「Object Messaging」セクションにも、非常に役立つ情報がいくつかあります。
Objective-C プログラミング言語は次の ことを教えてくれます。
メソッドの戻り値など、Objective-C のオブジェクト指向構造の場合、id はデフォルトのデータ型として int を置き換えます。(関数の戻り値など、厳密に C の構造の場合、int はデフォルトの型のままです。)