3

类、对象、方法

在本章中,你讲学习一些面向对象编程的技巧及如何在objective-c中编写类。

什么是对象

我们通过一个日常的例子来解释它。我们假设您拥有一辆轿车,很显然这辆车就是一个对象。现在你没有任何一辆车,那么你的车有可能在底特律、日本或者世界上任何一个地方的工厂里制造中,是个抽象的。 而相应的你可能会去驾驶它,给它加油,洗车等等,这些都是针对于这个对象发生的动作。(这些,类,对象等含义与其他面向对象编程语言相同,因此定义方面也就不多说了)

现在通过实际例子来快速了解吧。下面假设你不了解类、方法等。你写的程序可能是这个样子的:

下面是面向对象方式的写法。

在objective-c中,类的声明分为两部分。

  1. 定义部分:以@interface开头,@end结尾。定义了类中的成员,方法,方法的返回类型,参数等。
  2. 实现部分:类名同声明时的类名相同,如下例中的 Fraction 。对于定义中的实现。

我为了熟悉这个定义调用等方法,自己照葫芦画瓢做了一个,调试的时候总是报错:cannot init a class object  找了半天才发现,原来是创建实例的时候如下。

我误将myFraction=[myFraction init];  写成 myFraction=[Fraction init];  了  myFraction才是实例,Fraction是类名,怪不得会报那个错呢。呵呵,不过这样对于objective-c中对于对象的初始化有了更深的印象,出点错也未尝不是件好事。

现在具体分析下类的定义,及相关使用方法。

首先,定义一个类需要,给它取一个名字(这与所有面向对象编程语言相同),然后在objective-c中,需要指定该类的父类,也就是继承自哪个类。如下

NSObject相当于c#中的object,是根类。
然后在大括号中间类成员,变量的定义。如下(返回值,跟变量名,同其他语言一样,没什么好说的)

接着是方法的定义。如下共定义了三个方法:print、setNumerator、setDenomainator   其中 (void)前面的 - 号表示表示该方法是实例方法,相应的 + 表示类方法。 这里是与我之前接触的编程语言大不相同的地方。 (void)不用多说,大家应该相当熟悉表示方法的返回类型。接着是方法名称如print、setNumerator等。

需要注意的是objective-c中参数的前面需要有冒号 : 并且多个参数的话需要有多个冒号。如:

在weight后面的zhongliang是参数签名用来标示参数作用的。
然后是实现部分@implementation  名称需要与定义部分的名称相同@implementation Fraction 。接着是实现之前所定义方法的具体代码实现。

最后是main函数中,具体的调用过程。

NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init]  创建工程后 这一段系统会自动添加,具体原理等稍后的内存管理中会详细解释。

创建实例:Fraction *myFraction=[fraction allock]  等同于:

释放内存:[myFraction release]; 这个是与其他自动垃圾回收不同的地方。

 

 

 


 

posted on 2011-11-14 17:09  falcon_fei  阅读(350)  评论(0编辑  收藏  举报