您学习中缺少的概念是“选择器”。它本质上就像“装饰”一个方法签名,其语义比带括号的参数传递所能获得的语义更多。我们倾向于为我们的方法原型使用描述性的、类似句子的“选择器”。例如,考虑这个基本函数:
void function setDimensions(int width, int height);
在 Objective-C 中,我们会这样写:
- (void) setWidth:(int) newWidth height:(int) newHeight;
并且“选择器”(这是 Objective-C 中的一流概念)是setWith:height:(包括冒号,但没有其他任何内容)。这就是在该类上唯一标识该方法的东西。
调用该方法发生在运行时,当您向该对象发送一条消息,并将参数放在选择器中的冒号之后。因此,消息具有三个基本组成部分:接收者、选择器和放置良好的参数:
[anObject setWidth: 1024 height: 768];
这里,anObject
是接收者,setWidth:height:
是选择器(帮助运行时找到方法),参数是:newWidth = 1024; newHeight = 768;
.
然后在方法的实现中,只需像您期望的那样使用 newWidth 和 newHeight :
- (void) setWidth:(int) newWidth height:(int) newHeight; {
self.width = newWidth; // 1024
self.height = newHeight; // 768
}
起初它可能看起来很尴尬和多余,但当你习惯它之后,你会更喜欢它,并发现自己用其他语言编写更长、更语义化的函数名称。
与选择器相关的概念在与一些Objective-C 运行时的基础知识一起学习时会更好地理解,特别是“发送消息”(而不是“调用方法”)的概念以及在运行时,而不是编译的事实。根据您在消息中使用的选择器查找实际方法的时间。这发生在运行时的事实为高度动态的架构提供了显着的灵活性。