编译以下方法定义(使用Apple LLVM 4.1)时,我感到很惊讶:
- (void) testMethod:someArgument {
}
注意缺少someArgument
的类型。 Objective-C中有关指定方法参数类型的规则是什么?
答案 0 :(得分:7)
默认参数类型为id
。即使这样也会编译:
- testMethod:someArgument {
}
这是一个以id
为参数的方法,应返回id
。
实际上,甚至不需要方法名称:
- :someArgument {
}
这可以称为:
[self :someObject];
当然所有这些都是非常糟糕的做法,你应该总是指定类型(和名称)。
答案 1 :(得分:2)
method参数中的“type”用于编译器和运行时消息传递的类型检查。
在原型中调用它的方式,它相当于“(id)
”。
您可以在Apple Programming with Objective C document的“方法可以参数”部分中找到更多信息。我还在"The Objective-C Programming Language" document的“对象消息”部分中看到了一些非常有用的信息。
答案 2 :(得分:2)
语言规范声明:
如果未显式声明返回或参数类型,则假定为 作为方法和消息的默认类型 - 一个id。
答案 3 :(得分:1)
Objective-C编程语言 tells us:
对于Objective-C的面向对象的构造,例如方法 返回值,id将int替换为默认数据类型。 (严格来说 C构造(例如函数返回值)int仍然是默认值 类型。)