3
类、对象、方法
在本章中,你讲学习一些面向对象编程的技巧及如何在objective-c中编写类。
什么是对象
我们通过一个日常的例子来解释它。我们假设您拥有一辆轿车,很显然这辆车就是一个对象。现在你没有任何一辆车,那么你的车有可能在底特律、日本或者世界上任何一个地方的工厂里制造中,是个抽象的。 而相应的你可能会去驾驶它,给它加油,洗车等等,这些都是针对于这个对象发生的动作。(这些,类,对象等含义与其他面向对象编程语言相同,因此定义方面也就不多说了)
现在通过实际例子来快速了解吧。下面假设你不了解类、方法等。你写的程序可能是这个样子的:
下面是面向对象方式的写法。
在objective-c中,类的声明分为两部分。
- 定义部分:以@interface开头,@end结尾。定义了类中的成员,方法,方法的返回类型,参数等。
- 实现部分:类名同声明时的类名相同,如下例中的 Fraction 。对于定义中的实现。
我为了熟悉这个定义调用等方法,自己照葫芦画瓢做了一个,调试的时候总是报错:cannot init a class object 找了半天才发现,原来是创建实例的时候如下。
//创建一个实例 myFraction=[Fraction alloc]; myFraction=[myFraction init];我误将myFraction=[myFraction init]; 写成 myFraction=[Fraction init]; 了 myFraction才是实例,Fraction是类名,怪不得会报那个错呢。呵呵,不过这样对于objective-c中对于对象的初始化有了更深的印象,出点错也未尝不是件好事。
现在具体分析下类的定义,及相关使用方法。
首先,定义一个类需要,给它取一个名字(这与所有面向对象编程语言相同),然后在objective-c中,需要指定该类的父类,也就是继承自哪个类。如下
@interface Fraction:NSObjectNSObject相当于c#中的object,是根类。
然后在大括号中间类成员,变量的定义。如下(返回值,跟变量名,同其他语言一样,没什么好说的)
接着是方法的定义。如下共定义了三个方法:print、setNumerator、setDenomainator 其中 (void)前面的 - 号表示表示该方法是实例方法,相应的 + 表示类方法。 这里是与我之前接触的编程语言大不相同的地方。 (void)不用多说,大家应该相当熟悉表示方法的返回类型。接着是方法名称如print、setNumerator等。
-(void) print; -(void) setNumerator:(int) n; -(void) setDenomainator:(int) d;需要注意的是objective-c中参数的前面需要有冒号 : 并且多个参数的话需要有多个冒号。如:
-(void) exampleMetho:(int) weight zhongliang:(int) height在weight后面的zhongliang是参数签名用来标示参数作用的。
然后是实现部分@implementation 名称需要与定义部分的名称相同@implementation Fraction 。接着是实现之前所定义方法的具体代码实现。
最后是main函数中,具体的调用过程。
NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init] 创建工程后 这一段系统会自动添加,具体原理等稍后的内存管理中会详细解释。
创建实例:Fraction *myFraction=[fraction allock] 等同于:
Fraction *myFraction; myFraction=[Fraction alloc]; myFraction=[myFraction init];释放内存:[myFraction release]; 这个是与其他自动垃圾回收不同的地方。