全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
解析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,Xcode1。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-CObjective-C其实和C很类似,只不过拥有一些附加特性,它支持面向对象的编程,可以定义类,支持继承、协议(相当于接口)。通过下面的代码,我们会更直观的了解Objective-C的特点:Main函数:#import 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.hinterface MyClass : BaseClass int mValue;- (int) getValue;- (void) setValue: - (int) inValue;- (BOOL) isValid;+ (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; iplatFormCount; i+) NSLog(”the number is %d”,i); 上面代码中使用了一个变量来限定循环的次数,可能这与大家学习循环语句时的习惯不一样。但是小小的一个变量的使用,在实际开发中将带来你意想不到的好处。通过添加变量,代码变得更加干净,并且更易于扩展和维护(特别在其他编程人员需要修改此代码时),为了修改循环值,他们不必仔细看程序中每个5的含义,以确定是否需要修改。并且通过变量的名称我们也能大概猜想到这段程序是什么作用。3.2 使用文件名的间接下面我们来实现输出一组字符串的功能,这个应该很容易实现:#import int main(int argc, char *argv ) const char *words4=aardaaaa,abcddd,allude,ddeeerg; int wordCount = 4; int i; for (i =0; iwordCount; i+) NSLog(%s,wordsi); return 0; 如果需求改变,需要输出学校的所有研究生的姓名专业,那是不是得让程序员重新修改程序呢?那肯定是最坏的方法,我们可以通过使用文件的读入,来获得研究生的名单,每次修改名单只需要修改文件。这样也不需要程序员来修改和管理软件。main函数中改为:FILE *wordFile fopen(“/tmp/words.text”,r);char word100;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模拟器上运行的效果。图2.运用类间的间接关系实例结果图2程序允许把图片分享到下面的分享平台中,对于每个分享平台怎么来处理分享这个动作我们并不知道,同时也不需要每个程序员都知道。通过下面的分析,你将会感受到间接的强大。分享代码:OpenPlatformBase *plat ; for (int i = 0;i4 ; i+) plat = shareList objectAtIndex:i; plat setObserverelf; if (plat authorized) if (plat shareEnable ) /执行我们希望的操作plat PostContentWithPic:string PicUri:filePath;我们只是声明了一个基类的对象,基类的初始化是通过shareList(按新浪、网易、腾讯、人人网的顺序存储) 中的每个对象来进行初始化的。通过基类的对象来调用函数plat authorized、plat shareEnable、plat PostContentWithPic:string PicUri:filePath;(假设分享到新浪微博)并不知道是新浪的平台调用了自己的函数还是调用了别人的,这是怎么做到的呢?他们的UML图如下:图3.各个类之间的关系以下是程序实际执行的步骤:(1)查询消息的目标对象,看看它属于什么类;(2)如果是新浪类,那么新浪类查找其代码块,然后获取authorized、shareEnable、postContenWithPic函数的地址;(3)Objective-C运行新浪的authorized、shareEnable、postContentWithPic的代码,如果它没有在新浪类中找到相应的函数,接下来将继续在父类中找,必要时,这种操作将会在继承链中的每个类中重复执行,如果根上的父类也没有该方法,则会出现运行时错误(同时还会出现编译时警告信息)。该程序展示了一些非常棒的间接操作!如果该程序采用面向过程的方法编写,我们必须编写代码来决定要调用哪个函数。现在,可统一由Objective-C在幕后作出决定,它将查询对象属于哪个类。这可以降低调用错误函数的几率,同时使代码更易于维护、重用性也更高。3.3.2 委托 委托代理(delegate),顾名思义,把某个对象要做的事情委托给别的对象去做4。那么别的对象就是这个对象的代理,代替它来打理要做的事。很明显这也是一种间接的方式,软件设计模式中将它称之为代理模式。在IOS的开发中经常会使用到这种间接方式,比如上下两个界面之间的传值问题,或者下层的改变驱动上层执行什么操作。下面,我们来看一下委托的实现过程:图4.设置相片群加入权限图5. 修改加入权限图6. 相片群加入属性改变后需要实现的结果:更改加入权限,从密码加入改为任何人都均可加入,即从图4到图5,再返回图4的界面时,值已经被改变。图6是图4是同一个界面。加入群设置页面就是发出委托的页面(称为B),申明了它的委托中要实现的函数名,却没有具体函数的实现过程。前一个视图(称为A)执行了它委托的函数,并实现函数的具体内容。B.h文件中:定义一个委托(delegate)protocol BDelegate-(void)passTheSetting :(NSString *)value;-(void)passTheCode :(NSString *)value;endproperty (nonatomic,retain) NSObject *delegate;B.m文件中,需要调用委托的地方,调用delegate passTheSetting:任何人均可加入;A.h中,A类必须满足这个delegae的协议,interface A: UIViewControllerA.m中,实现-(void)passTheSetting:(NSString *)value/具体实现的方法-(void)passTheCode:(NSString *)value/具体实现的方法在需要监听别人委托处,设置监听者为自己。B *setting = B alloc initWithNibName:B bundle:NSBundle mainBundle autorelease; setting.delegate = self; 委托的实现过程,可总结为:委托方定义需要执行的方法,受委托方已和你达成协议,只要你委托它时,它收到委托的消息后就执行你定义的方法。这种间接的方式,就是请别人帮自己完成动作,在某种条件下就必须使用这种间接的方式。比如:人过逝后,只能请别人代为执行自己生前留下的遗嘱,这种情况也是一种间接的思想。4、总结本文介绍了IOS开发所必需的基本知识,着重论述了Objective-C语言的核心思想之一“间接”。文章从三个方面由浅及深的阐述了间接思想在实际项目开发中的巨大作用,可以提高代码的可重用性、易维护性、可扩展性。编程的思想是不局限于开发语言的,本文无论对于IOS初步开发还是其他平台的开发,都具有一定的指导意义。 References (参考文献)1 Duncan Campbell.iPhone SDK3 Visual QuickStart GuideM.北京:机械工业出版社, 2010.2 Mark Dalrymple,Scott Knaster. Learn Objective-C on the MacM. 北京:人民邮电出版社, 2009.8.3 WU Xiao-Qin. Analyses technology of object-oriented the features of object-oriented program designJ. Journal of Anhui University(Natural Sciences), 2002,26(3). P33-37(Ch).吴晓琴.浅析面向对象程序设计特点J.安徽大学学报(自然科学版), 2002,26(3). P33-37.4 Erica Sadum.iphone.The iPhone Developers Cookbook Buiding Application with the iPhone 3.0 SDKM.北京:人民邮电出版社.2011.11Analyzing the Indirect Thoughts of Objective-CAb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗护理制度试题及答案
- 创新创业策划书团队介绍
- 2025年农业种植实操题库及答案
- 数字贸易对出口韧性影响的研究
- 2025国家电力投资集团有限公司高级管理人员选聘笔试历年参考题库附带答案详解
- 临床护理科研意识
- ICU脑出血护理查房大纲
- 2025年下半年鹤壁市人民医院招聘高层次人才5人备考题库带答案解析
- 2025年广西梧州市事业单位招聘1257人笔试备考题库及参考答案详解一套
- 医学本科生科研前置培养模式的创新与思考
- 2025年光伏电站设备维护合同协议
- 地下室交易合同范本
- 2025年宪法知识竞赛参考培训试题及答案
- 2025秋统编版小学道德与法治四年级上册期末测试卷附答案(共三套)
- 2025大庆市龙凤区第二批次事业单位人才引进60人备考题库附答案
- 2025年厨房安全教育试卷及答案
- 中国过敏性哮喘诊治指南2025年解读
- 2025雇佣短期驾驶员合同
- (2025年)全市民行检察业务竞赛试题及答案
- 2025云南楚雄州元谋县产业投资集团有限公司员工招聘公17人告笔试历年常考点试题专练附带答案详解试卷3套
- 2025四川宜宾市公用事业服务集团有限公司及其子公司第一批员工招聘26人笔试考试备考试题及答案解析
评论
0/150
提交评论