6

次のメソッド定義がコンパイルされたときは驚きました (Apple LLVM 4.1 を使用)。

- (void) testMethod:someArgument {

}

someArgumentの型が欠落していることに注意してください。メソッド引数の型を指定することに関するObjective-Cのルールは何ですか?

4

4 に答える 4

7

デフォルトの引数タイプはidです。これでもコンパイルされます:

- testMethod:someArgument {
}

これは、id引数として を受け取り、 を返すメソッドidです。

実際には、メソッド名さえも必要ありません:

- :someArgument {
}

これは次のように呼び出すことができます。

[self :someObject];

もちろん、これはすべて非常に悪い習慣であり、常に型 (および名前) を指定する必要があります。

于 2012-10-01T14:27:58.073 に答える
2

言語仕様の状態:

戻り値またはパラメーターの型が明示的に宣言されていない場合は、メソッドとメッセージの既定の型 (id) と見なされます。

http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/chapters/ocDefiningClasses.html

于 2012-10-01T14:32:55.720 に答える
2

メソッド引数の「型」は、コンパイラによる型チェックとランタイム メッセージ パッシングの両方に使用されます。

プロトタイプで呼び出されている方法は、「(id)」と同等です。

詳しくは、Apple のProgramming with Objective C ドキュメントの「Methods can take Parameters」セクションを参照してください。「The Objective-C Programming Language」ドキュメントの「Object Messaging」セクションにも、非常に役立つ情報がいくつかあります。

于 2012-10-01T14:28:52.797 に答える
1

Objective-C プログラミング言語は次の ことを教えてくれます。

メソッドの戻り値など、Objective-C のオブジェクト指向構造の場合、id はデフォルトのデータ型として int を置き換えます。(関数の戻り値など、厳密に C の構造の場合、int はデフォルトの型のままです。)

于 2012-10-01T14:45:52.797 に答える