在之前的项目中,我们编程都是直接写在一个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[]; //四个轮子,定义一个四个数的数组。
}
-(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< || index>)
{
NSLog(@"bad index(%d) in setTire:atIndex",
index);
exit();
}
tires[index] = tire;
} -(Tire *) tireAtIndex:(int) index
{
if(index< || index>)
{
NSLog(@"bad index(%d)in tireAtIndex:",
index);
exit();
}
return (tires[index]);
} -(void) drive{
NSLog(@"%@",engine);
NSLog(@"%@",tires[]);
NSLog(@"%@",tires[]);
NSLog(@"%@",tires[]);
NSLog(@"%@",tires[]);
}
@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=;i<;i++)
{
Tire *tire = [Tire new];
[car setTire:tire atIndex:i];
} [car drive];
return ;
}

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

  由于本篇博文只是简单的将代码结构重新的整理了下,至于功能代码则和上一篇中介绍的完全相同,这边就不再细说了。如果朋友们感兴趣或者有看不懂的,可以查看上一篇博文,或者给我留言。好了,时间不早了,洗洗早点睡吧。

《objective-c基础教程》学习笔记(八)—— 拆分接口和实现的更多相关文章

  1. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  2. 【学习笔记】Python基础教程学习笔记

    教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...

  3. 匿名内部类--毕向东java基础教程学习笔记

    1.匿名内部类其实就是内部类的简写形式. 2.定义匿名内部类的前提: 该内部类必须继承一个类,或者实现一个接口. 3.匿名内部类的格式:new 父类名或接口名(){定义子类内容:} 4.其实匿名内部类 ...

  4. 内部类--毕向东Java基础教程学习笔记

    内部类的访问规则 1. 内部类可以直接访问外部类的成员,包括私有. 之所以可以直接访问外部类的成员,是因为内部类中持有外部类的引用,格式:外部类名.this 2.外部类要访问内部类,必须建立内部类对象 ...

  5. 异常处理——毕向东Java基础教程学习笔记

    1.异常:就是程序运行过程中出现的不正常情况. 异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象.                        其实 ...

  6. 《嵌入式Linux基础教程学习笔记一》

    常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...

  7. Objective-C基础教程学习笔记(附录)从Java转向Objective-C

    Java接口与Objective- C正式协议类似,因为它们都需要实现一组方法.Java具有抽象类,但Objective-C没有.Java具有类变量,但在Objective-C中, 可以使用文件范围内 ...

  8. Python基础教程学习笔记:第二章 列表和元组

    1.序列中元素的索引: 第一个元素索引是0,第二个是1,依次递增 最后一个元素索引是-1,倒数第二个是-2,依次递减 2.序列(Sequence)的种类: 列表(list).元组(tuple).字符串 ...

  9. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  10. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

随机推荐

  1. HDU 2019 数列有序!

    Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %I64d , %I64u   Java class name ...

  2. 关于.net 中Clipboard.GetDataObject() 之后读出数据读出的数据都是相同的解决方法

    模拟键盘sendkey("^c") 多次复制之后 当使用Clipboard.GetDataObject() 读出数据都是一个值 经过多次尝试 提供一个解决方案 IDataObjec ...

  3. WPF ToolKit Chart 自定义样式

    1.引用:WPFToolkit.dll, System.Windows.Controls.DataVisualization.Toolkit.dll 2. 页面代码参考如下: <UserCont ...

  4. Orleans 高级特性-目录

    这里将介绍一些Orleans的高级特性,适合对Orleans已经有不少了解的用户,先列出一个索引,博客文章慢慢补充 1.使用Immutable 优化复制 2.自定义序列化 (待完成) 3.可重入 Gr ...

  5. 比较任意两个JSON串是否相等(比较对象是否相等)JAVA版

    废话少说,直接入题. 在面向对象语言中,经常会比较两个对象是否相等,而比较的大多是实体类实例,也就是封装数据的那些类实例,或者是Map.List互相嵌套成的复杂数据结构. 比较对象是否相等,常见的思路 ...

  6. AngularJS快速入门指南10:DOM节点

    AngularJS通过指令将application数据绑定到HTML DOM元素的属性上. ng-disabled指令 ng-disabled指令将AngularJS application数据绑定到 ...

  7. ios 项目里常用的宏

    NSLog(@"__func__ :  %s", __func__);//oc测试环境,打印文件名,方法名 NSLog(@"__FUNCTION__ : %s" ...

  8. Atitit.实现反向代理(1)----url rewrite 配置and内容改写 and -绝对路径链接改写 java php

    Atitit.实现反向代理(1)----url rewrite  配置and内容改写 and -绝对路径链接改写 java php 1. 代理的实现:::普通代理and反向代理?? 1 2. url  ...

  9. 白条VS花呗,快餐式消费金融成巨头新战场

    在这一次的国庆假期前,90后网红密子君吃空麦当劳事件引发了网友们的热议.短短半个小时,这位90后网红就吃光了25包薯条,随后又吃下两杯麦旋风,其疯狂举动引得四周食客纷纷围观拍照.那么,是什么刺激这位9 ...

  10. Bootstrap中水平排列的表单form-inline

    <html> <head> <title>初识Bootstrap</title> <meta charset="utf-8"& ...