方法的声明由以下几个部分构成:方法类型标识符,返回类型,一个或多个方法签名关键字,以及参数类型和名称。下面的图中是实例方法 insertObject:atIndex: 的声明语句。
在实例方法中,声明的开头是一个 – 减号;而声明类方法时前面要使用 + 加号。下文的“类方法”章节将详细讲述类方法的概念。
方法的名称(insertObject:atIndex:)是一系列方法签名关键词联结而成,包括冒号。冒号表示将会出现参数。在上面的例子中,这个方法含有两个参数。如果某个方法没有参数,则需要将第一个(也是唯一一个)方法签名关键词后面的冒号省略掉。
当你需要调用一个方法时,就是要向实现了该方法的对象发送一个消息,简而言之,就是给对象发送消息。(虽然“发送消息”常常用作“调用方法”的近义词,但是在 Objective-C 的运行时中,实际情况是发送消息。)一个消息就是一个方法的名字带上该方法所需的参数信息(要和数据类型正确对应)。你向对象发送的所有消息都是动态调度的,以此来实现 Objective-C 语言的多态性。(多态性是指:不同类型的对象都能对同一种消息做出回应。)有时,所调用的方法是由接收消息的对象的类的父类实现的。
要调度一个消息,运行时要求正确的消息表达方式。消息表达式由一对方括号([ 和 ])把消息(以及所需的参数)包裹起来,接收消息的对象写在左边括号后边。比如,要向 myArray 变量所含的对象发送一个 insertObject:atIndex: 消息,你要按下面的语法进行书写:
[myArray insertObject:anObject atIndex:0];
为了避免声明大量局部变量来存储临时结果,Objective-C 允许嵌套消息表达式。每个嵌套的表达式返回的值都会作为一个参数,或者接收消息的对象,甚至是另一个消息。比如,你可以将上一个例子中的任意一个变量替换成用消息接收数值。这样一来,如果你还有一个叫做 myAppObject 的对象,它含有访问数组对象以及将对象插入数组的方法,你可以将那个例子改造成下面这样:
[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];
Objective-C 还提供了点语法特性,用来访问存取方法。存取方法是对象的 get 和 set 语句,这里是封装的关键,封装是所有对象的重要特性。对象把自己的状态封装(或隐藏)起来,并提供一个能让所有实例访问这个状态的通用接口。利用点语法,之前的例子又可以被改写成:
[myAppObject.theArray insertObject:myAppObject.objectToInsert atIndex:0];
点语法还可以用来赋值:
myAppObject.theArray = aNewArray;
这个语法其实是 [myAppObject setTheArray:aNewArray]; 这个语句的另一种表述方式。
而且,请回想一下,在“你的第一个 iOS 应用”教程里,你已经用过点语法来对变量进行赋值了:
self.userName = self.textField.text;
下文中的“已声明的属性和存取方法”章节将向你详细介绍存取方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |