iphone学习笔记(三)

3

类、对象、方法

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

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

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

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

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

  1. 定义部分:以@interface开头,@end结尾。定义了类中的成员,方法,方法的返回类型,参数等。
  2. 实现部分:类名同声明时的类名相同,如下例中的 Fraction 。对于定义中的实现。
#import<Foundation/Foundation.h> @interface Fraction:NSObject { int numerator; int denominator; } -(void) print; -(void) setNumerator:(int) n; -(void) setDenomainator:(int) d; @end @implementation Fraction -(void) print { NSLog(@"%i/%i",numerator,denominator); } -(void) setNumerator:(int) n { numerator=n; } -(void) setDenominator:(int) d { denominator=d; } @end int main(int argc,char *argv[]) { NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init] Fraction *myFraction; //创建一个实例 myFraction=[Fraction alloc]; myFraction=[myFraction init]; //给前面定义的变量赋值 [myFraction setNumerator:1]; [myFraction setDenominator:3]; //显示输出结果 NSLog(@"The value of myFraction is:"); [myFraction print]; [myFraction release]; [pool drain]; return 0; }

我为了熟悉这个定义调用等方法,自己照葫芦画瓢做了一个,调试的时候总是报错: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:NSObject

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

int numerator; int denominator;

接着是方法的定义。如下共定义了三个方法: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]; 这个是与其他自动垃圾回收不同的地方。

 

 

 


 

转载于:https://www.cnblogs.com/falcon-fei/archive/2011/11/14/2379889.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值