A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jing397 中级黑马   /  2015-10-10 21:28  /  1122 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果你刚刚开始接触面向对象编程,不妨先把“方法”想象成每个对象特有的一个函数。通过向一个对象发送消息,你便调用了对象的某个方法。Objective-C 中有两种方法:实例方法以及类方法。
  • 实例方法顾名思义,它的作用域仅在某个类的一个实例当中。换句话说,在调用某个实例方法之前,你必须先创建一个实例才行。实例方法是最常见的方法。
  • 类方法则是指其作用域包括该方法所在的整个类。它不要求某个对象的实例作为消息的接收者。

方法的声明由以下几个部分构成:方法类型标识符,返回类型,一个或多个方法签名关键字,以及参数类型和名称。下面的图中是实例方法 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;

下文中的“已声明的属性和存取方法”章节将向你详细介绍存取方法。


1 个回复

倒序浏览
学习了.........
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马