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