6

当编译以下方法定义(使用 Apple LLVM 4.1)时,我感到很惊讶:

- (void) testMethod:someArgument {

}

someArgument请注意缺少的类型。Objective-C 中关于指定方法参数类型的规则是什么?

4

4 回答 4

7

默认参数类型是id. 即使这样也会编译:

- testMethod:someArgument {
}

这是一个以 anid作为参数的方法,应该返回一个id.

实际上,甚至不需要方法名称:

- :someArgument {
}

这可以称为:

[self :someObject];

当然,所有这些都是非常糟糕的做法,您应该始终指定类型(和名称)。

于 2012-10-01T14:27:58.073 回答
2

方法参数中的“类型”用于编译器的类型检查和运行时消息传递。

它在你的原型中被调用的方式,它相当于一个“ (id)”。

您可以在 Apple 的Programming with Objective C 文档的“方法可以采用参数”部分找到更多信息。我还在“The Objective-C Programming Language”文档的“Object Messaging”部分看到了一些非常有用的信息。

于 2012-10-01T14:28:52.797 回答
2

语言规范指出:

如果没有显式声明返回或参数类型,则假定它是方法和消息的默认类型 - 一个 id。

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

于 2012-10-01T14:32:55.720 回答
1

Objective-C 编程语言 告诉我们

对于 Objective-C 的面向对象构造,例如方法返回值,id 替换 int 作为默认数据类型。(对于严格的 C 构造,例如函数返回值,int 仍然是默认类型。)

于 2012-10-01T14:45:52.797 回答