解析Objective-C中的间接思想

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解析Objective-C中的间接思想

【摘要】移动互联网快速发展的今天,智能手机终端的开发也变成了热门行业。IOS和Android作为目前主流的智能手机操作系统,基于IOS和Android的软件开发也在市场上掀起了一股开发热潮。Objective-C作为IOS开发推荐使用的语言,它的核心思想之一就是间接。许多面向对象的语言,核心思想都是相通的,希望通过基于Objective-C间接思想的探讨,可以提高程序开发的高效和易维护性。

【关键词】智能终端;IOS;Objective-C;间接

1 引言

随着移动智能终端的不断普及、移动应用的日益丰富,整个移动互联网产业正进入了应用为王、内容为王的时代。各式各样的手机应用、手机游戏软件如雨后春笋般,迅速进入我们的生活,改变我们的生活。目前智能手机操作系统主要包括:Windows Mobile、Symbian、IOS、Android。IOS即苹果手机的操作系统,IOS简单的操作、优雅的设计、流畅的使用等特点,吸引了大量用户,也引来了很多开发者的追捧。

IOS的开发,首先需要先安装Mac OS X,Xcode[1]。Mac OS X是苹果电脑的操作系统相当于Windows,Xcode是IOS应用的开发环境相当于VC++ 6.0,其中包含了iPhone的模拟器、Cocoa框架。图1所示为Xcode 4的开发环境,它包含了iPhone的模拟器、编译器、调试器和图像化设计的Interface Build工具。

图1.Xcode开发环境

Cocoa是Mac OS X上的快速应用程序开发(RAD, Rapid Application Development)框架,一个高度面向对象的(Object Oriented)开发框架,相当于VC++6.0中的MFC,封装和集成许多基本的类。Objective-C被推荐为Cocoa程序的开发语言。Objective-C简而言之就是拥有面向对象层的C,它实际上是C的扩展。由于整个Cocoa Framework都是由Objective-C/C实现的,掌握Objective-C对IOS 的开发者来说是至关重要的。

2 从C/C++快速了解Objective-C

Objective-C其实和C很类似,只不过拥有一些附加特性,它支持面向对象的编程,可以定义类,支持继承、协议(相当于接口)。通过下面的代码,我们会更直观的了解Objective-C的特点:

Main函数:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[ ]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSLog(@"Hello, World!");

[pool drain];

return 0;

}

与其他语言一样,Objective-C的程序入口也是main;也需要包含库中的基本函数和数据类型,但这里使用#import。

Objective-C对类的声明:

#import "BaseClass.h"

@interface MyClass : BaseClass

{

int mV alue;

}

- (int) getV alue;

- (void) setV alue:

- (int) inV alue;

- (BOOL) isV alid;

+ (MyClass*) getInstance;

@end

与C++对比,可以得出以下的特点:

(1)#import 取代了#include,当头文件嵌套包含的时候,它的作用就发挥出来了。#import可保证头文件只包含一次,而不论此命令实际上再哪个

文件出现了多少次。

(2)类的声明的关键字是@interface,用来通知编译器:这里是一个类。@end通知类结束。

(3)继承的时候没有限定符,继承都是public 的。没有构造函数和析构函数,成员变量和函数没有限定符,成员变量缺省是private 的,而函数是public 的。

但C++具备很多Objective-C所没有的特性:多重继承、命名空间、运算符重载、模板、类变量、抽象类等。不过Objective-C提供了有关的技术来代替这些特性[2]。

3 间接的思想

在编程行业有句老话,大意是:“只要多添加一个间接层,计算机科学中就没有解决不了的问题”。间接这个词的含义很简单——不在代码中直接使用某个值,而是使用指向该值的指针。比如:我们不记得某人的电话号码,但是我们可以通过查电话薄来知道。这种方式是一种间接的形式。或者:我们本来要去图书馆还书,但有同学刚好去,你可以请同学帮你还,你可以不用亲自去图书馆就把书还了。这也是一种间接:让他人代替你自己去完成工作。

在编程时,可以利用多层间接,如编写一段代码来找到另一段代码,而后者还可以访问另一层代码,这种也是一种形式上的间接。本文从三个方式上说明间接的使用:变量、文件、调用代码。

3.1 变量与间接

先来看一段大家很熟悉的代码:

int platFormCount = 4;

for (int i=0; i<platFormCount; i++) {

NSLog(@”the number is %d”,i);

}

上面代码中使用了一个变量来限定循环的次数,可能这与大家学习循环语句时的习惯不一样。但是小小的一个变量的使用,在实际开发中将带来你意想不到的好处。通过添加变量,代码变得更加干净,并且更易于扩展和维护(特别在其他编程人员需要修改此代码时),为了修改循环值,他们不必仔细看程序中每个5的含义,以确定是否需要修改。并且通过变量的名称我们也能大概猜想到这段程序是什么作用。

3.2 使用文件名的间接

下面我们来实现输出一组字符串的功能,这个应该很容易实现:

#import <Foundation/Foundation.h>

int main(int argc, char *argv[ ])

{

const char *words[4]

={"aardaaaa","abcddd","allude","ddeeerg"};

int wordCount = 4;

int i;

for (i =0; i<wordCount; i++) {

NSLog(@"%s",words[i]);

}

return 0;

}

如果需求改变,需要输出学校的所有研究生的姓名专业,那是不是得让程序员重新修改程序呢?那肯定是最坏的方法,我们可以通过使用文件的读入,来获得研究生的名单,每次修改名单只需要修改文件。这样也不需要程序员来修改和管理软件。main函数中改为:

FILE *wordFile =fopen(“/tmp/words.text”,r);

char word[100];

while(fgets(word,100,wordFile)){

NSLog(@"%s",words);

}

fclose(wordFile);

return (0);

这种间接方式,带来的便利性,不言而喻,对输入数据频繁改变的需求来说,使用此方法降低了程序维护的复杂性。

3.3 调用代码中使用间接

3.3.1 继承

面向对象编程(Object-Oriented Programming 简称OOP),真正的革命性就是它在调用代码中使用间接[4]。Objective-C就是面向对象的C,下面来介绍一下Objective-C中的OOP。图2显示的就是程序在iPhone模拟器上运行的效果。

相关文档
最新文档