《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中写实现方法:
Tire.m中写实现方法:
接下来修改Car.h文件,写Car类的定义方法:
注意:要先在最上面引用“Engine.h”和“Tire.h”。否则,代码就不能编译通过。
然后是修改Car类的实现方法:
最后,只要在main主函数的文件中,引用三个类文件的定义文件就可以了,实现的代码不用变:
项目文件的基本结构,以及运行的结果如图:
由于本篇博文只是简单的将代码结构重新的整理了下,至于功能代码则和上一篇中介绍的完全相同,这边就不再细说了。如果朋友们感兴趣或者有看不懂的,可以查看上一篇博文,或者给我留言。好了,时间不早了,洗洗早点睡吧。
那么,接下来这篇博文,我们就接着上一节的例子。将他定义和实现的代码分开,每个对象一个类。在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; }
项目文件的基本结构,以及运行的结果如图:
由于本篇博文只是简单的将代码结构重新的整理了下,至于功能代码则和上一篇中介绍的完全相同,这边就不再细说了。如果朋友们感兴趣或者有看不懂的,可以查看上一篇博文,或者给我留言。好了,时间不早了,洗洗早点睡吧。
相关文章推荐
- c++怎么将一个类,拆分出接口类,和实现类
- Win32 调试接口设计与实现浅析 [1] 用户态调试器结构初探
- 用Socket接口实现网络异步通信
- VB6下接口的实现
- 创建实现IExtenderProvider接口的自定义类
- 实现接口2
- 实现Java与C语言接口
- 俄罗斯方块的接口实现
- 如何通过COM接口得到实现该接口的对象实例
- 接口映射的实现及原理
- XML 简单接口 (SAX2)用Visual Basic 实现的示例
- "显式接口成员实现"你知道吗??
- Win32 调试接口设计与实现浅析 [3] 创建调试子系统
- 用ATL手法来实现接口设计
- Win32 调试接口设计与实现浅析 [3] 创建调试子系统
- 利用动态创建自动化接口实现VB的函数指针调用
- 接口实现的继承机制
- 今天的问题:一个简单的例子,请帮我解开“接口实现Java‘隐藏实现细目’”的迷惑。
- 实现将一个工资汇总表sheet拆分成多个个人工资单sheet
- 实现接口1