您的位置:首页 > 移动开发 > Objective-C

《objective-c基础教程》学习笔记(八)—— 拆分接口和实现

2014-12-03 23:15 309 查看
  在之前的项目中,我们编程都是直接写在一个main.m文件中。类的main()函数,@interface和@implementation部分都塞进一个文件。这种结构对于小程序和简便应用来说还可以。但是项目文件一多,规模一上去。这样就很不好,既不美观,代码也不好管理。

  那么,接下来这篇博文,我们就接着上一节的例子。将他定义和实现的代码分开,每个对象一个类。在Objective-c中,定义的文件写在h文件中,实现的代码写在m文件中。于是,我们先新建一个Command Tools项目。



选择项目文件要保存的地方



然后在新建的项目中依次新建三个类对象Car,Engine,Tire。每个类建好,都会生成两个文件(.h:写定义方法,.m:写实现方法)。



然后在Engine.m中写实现方法:

#import "Engine.h"

@implementation Engine
-(NSString *)description
{
return (@"I am an engine. Vrooom!");
}
@end


Tire.m中写实现方法:

#import "Tire.h"

@implementation Tire
-(NSString *) description
{
return (@"I am a tire. I last a while");
}
@end


接下来修改Car.h文件,写Car类的定义方法:

#import <Foundation/Foundation.h>
#import "Engine.h"
#import "Tire.h"

@interface Car : NSObject
{
Engine *engine;
Tire *tires[4]; //四个轮子,定义一个四个数的数组。
}
-(Engine *) engine;
-(void) setEngine:(Engine *) newEngine;
-(Tire *) tireAtIndex:(int) index;
-(void) setTire:(Tire *) tire atIndex:(int) index;
-(void) drive;
@end // Car


注意:要先在最上面引用“Engine.h”和“Tire.h”。否则,代码就不能编译通过。

然后是修改Car类的实现方法:

#import "Car.h"

@implementation Car
-(void) setEngine:(Engine *) newEngine
{
engine = newEngine;
}

-(Engine *) engine
{
return (engine);
}

-(void) setTire:(Tire *) tire
atIndex:(int) index
{
if(index<0 || index>3)
{
NSLog(@"bad index(%d) in setTire:atIndex",
index);
exit(1);
}
tires[index] = tire;
}

-(Tire *) tireAtIndex:(int) index
{
if(index<0 || index>3)
{
NSLog(@"bad index(%d)in tireAtIndex:",
index);
exit(1);
}
return (tires[index]);
}

-(void) drive{
NSLog(@"%@",engine);
NSLog(@"%@",tires[0]);
NSLog(@"%@",tires[1]);
NSLog(@"%@",tires[2]);
NSLog(@"%@",tires[3]);
}
@end


最后,只要在main主函数的文件中,引用三个类文件的定义文件就可以了,实现的代码不用变:

#import <Foundation/Foundation.h>
#import "Engine.h"
#import "Tire.h"
#import "Car.h"

int main(int argc, const char * argv[])
{
Car *car = [Car new];
Engine *engine = [Engine new];
[car setEngine:engine];
for(int i=0;i<4;i++)
{
Tire *tire = [Tire new];
[car setTire:tire atIndex:i];
}

[car drive];
return 0;
}


项目文件的基本结构,以及运行的结果如图:



  由于本篇博文只是简单的将代码结构重新的整理了下,至于功能代码则和上一篇中介绍的完全相同,这边就不再细说了。如果朋友们感兴趣或者有看不懂的,可以查看上一篇博文,或者给我留言。好了,时间不早了,洗洗早点睡吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: