资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
-Objective-C程序设计一、 Objective-C简介1.1历史Brad J.Co*在20世纪80年代早期设计了Objective-C语言,它以一种叫做SmallTalk-80的语言为根底。Objective-C在C语言的根底上又加了一层,这意味着对C进展了扩展,从而创造出一门新的程序设计语言,支持对象的创立和操作。1988年,Ne*T计算机公司获得了Objective-C语言的授权,并开展了Objective-C的语言库和一个开发环境,即NE*TSTEP。1992年,自由软件基金会的GNU开发环境增加了对Objective-C的支持。所有Free Software FoundationFSF产品的归FSF所有。它以GNU通用公共许可证来发布产品。1994年,Ne*T计算机公司和Sun公司联合发布了一个针对NE*TSTEP系统的标准标准,名为OPENSTEP。OPENSTEP在自由软件基金会的实现名称为GNUStep。有一个Linu*版本,它包括Linu*内核和GNUStep开发环境,这个Linu*发行版被十分贴切地命名为Linu*STEP。1996年12月20日,苹果公司宣布收购Ne*T软件公司,NE*TSTEP/OPENSTEP环境将成为苹果操作系统下一个主要发行版本OS *的根底。这个开发环境的版本被苹果公司称为Cocoa。它内置了对Objective-C语言的支持,并结合了Project Builder后继版本为*code和Interface Builder等开发工具,苹果公司为Mac OS *上的应用程序开发创立了一个功能强大的开发环境。2007年,苹果公司发布了Objective-C语言的升级版,并称之为Objective-C 2.0。1.2第一个Objective-C程序Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大局部OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。Objective-C完全兼容标准C语言,而在此根底上增加了面向对象编程语言的特性以及Smalltalk消息机制。开发工具:*code 下载地址:developer.apple.实例代码:#import int main(int argc,const char * argv) autoreleasepool NSLog(Hello World!); return 0;Objective-C源文件使用.m作为文件的扩展名。表1.1列出了常见的文件扩展名。表1.1代码解释:1注释:/或/* */2将文件信息导入或者包含到文件中,其中包含其他类和函数的有关信息。3main特殊名称,准确地表示程序在何处执行。4autoreleasepool自动释放池:使得应用在创立对象时,系统能够有效地管理应用所使用的内存。5调用名为NSLog的函数,传递给NSLog函数的参数是字符串:Hello World!符号位于一对双引号的字符串前面,成为NSString对象。NSLog不仅能显示简单短语,还能显示变量的值及计算结果。例如,NSLog(The sum of %i and %i is %i,value1,value2,sum);可以按格式输出变量的值。二、Objective-C程序设计初步2.1根本数据类型和表达式根本数据类型与C+语言根本一样,不同的是,Objective-C添加了一种id类型,id数据类型可存储任何类型的对象,从*种意义上说,它是一般对象类型。id类型是多态和动态绑定的根底。根本数据类型如表2.1所示,表2.1表达式与所有的程序设计语言一样,运算符具有优先级,优先级较高的运算符首先求值。如果优先级一样,可按照从左到右或者从右到左的方向来求值,具体按哪个方向取值取决于运算符。例如常见的算术运算符、逻辑运算符、赋值运算符等等。2.2根本控制构造与大多数程序设计语言相似,包括顺序、选择、循环构造,在此不再累述。三、类、对象与方法入门3.1根本概念对象对象是人们要进展研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、方案或事件。对象的状态和行为对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中类具有一样特性数据元素和行为功能的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据构造来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。类的构造在客观世界中有假设干类,这些类之间有一定的构造关系。通常有两种主要的构造关系,即一般-具体构造关系,整体-局部构造关系。一般-具体构造称为分类构造,也可以说是或关系,或者是is a关系。整体-局部构造称为组装构造,它们之间的关系是一种与关系,或者是has a关系。消息和方法对象之间进展通信的构造叫做消息。在对象的操作中,当一个消息发送给*个对象时,消息包含接收对象去执行*种操作的信息。发送一条消息至少要包括说明承受消息的对象名、发送给该对象的消息名即对象名、方法名。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体。3.2 Objective-C中的面向对象下面采用面向对象的方法编写一个用于处理分数的程序,代码如下所示,#import /-interface局部-interface Fraction:NSObject-(void) print-(void) setNumberator:(int) n;-(void) setDenominator:(int) d;end/-implementation局部-implement Fraction int numerator; int denominator;-(void) print NSLog(%i/%i,numerator,denominator);-(void) setNumberator:(int) n numerator=n;-(void) setDenominator:(int) d denominator=d;end/-program局部-int main(int argc,char *argv) autoreleasepool Fraction *myFraction; /创立一个分数实例 myFraction = Fraction alloc; myFraction = myFraction init; /设置分数为1/3 myFraction setNumerator:1; myFraction setDenominator:3; /使用打印方法显示分数 NSLog(The value of myFraction is :); myFraction print; return 0;代码解释:interface局部用于描述类和类的方法;implementation局部用于描述数据类对象的实例变量存储的数据,并实现在接口中声明方法的实际代码;program局部实现了程序的预期目的。1interface局部包含两个局部,首先需要告诉Objective-C编译器该类来自何处,也就是说,必须为它的父类命名。其次,必须定义在处理该类的对象时将要用到的各种操作或方法的类型。该局部的一般格式类似于以下语句:interface NewClassName: ParentClassName propertyAndMethodDeclarations;endObjective-C中变量的名称必须以字母或下划线_开头,之后可以是任何字母、下划线或者09之间的数字组合。对于大小写敏感。确定名称时,应该能反映变量或对象使用意图的名称。Objective-C中的方法分为类方法和实例方法,其中,负号-表示是实例方法,正号+表示是类方法。方法的完整定义如图2.1所示,图2.1方法定义2implementation局部implementation局部包含声明在interface局部的方法的实际代码,且需要指定存储在类对象中的数据类型。在interface局部声明方法,并在implementation局部定义它们。implementation局部的一般格式如下:implementation NewClassName memberDeclarations;methodDefinitions;end其中,memberDeclarations局部指定了哪种类型的数据将要存储到Fraction中,以及这些数据类型的名称。在这一局部声明的变量成为实例变量。methodDefinitions局部包含在interface局部指定的每个方法的代码中。每种方法的定义通过方法的类型、返回值和参数进展标识。2.3 program局部program局部包含解决特定问题的代码,必须有一个名为main()的函数作为程序开场的地方。如前段代码所述,通过以下程序行定义了一个名为myFraction的变量:Fraction *myFraction;这一行表示myFraction是一个Fraction类型的对象*号说明myFraction是Fraction对象的引用,存储了一个内存地址,说明对象数据在内存中的位置。使用myFraction=Fraction alloc init向*个类发送alloc消息获得该类的新实例,alloc保证所有的实例变量都变成初始状态。使用init方法初始化类的实例变量,init方法返回一个值,即被初始化的对象。下一步,程序行myFraction setNumerator:1 将控制转到Fraction类中定义的setNumerator方法,将myFraction的分子设置为1。四、Objective-C中的类4.1别离接口和实现文件通常,将类的声明即interface局部放在它自己的名为class.h文件中。而类的定义即implementation局部通常放在一样名称的文件中,但扩展名为.m。将接口和实现的局部分别放入两个文件,编译器会单独编译每个文件。要使用该类,只需导入接口文件即可。当编译器处理包含实现局部的文件时,需要接口局部的信息,因此需要导入.h文件。要把包含main函数的文件名保存为main.m,作为程序的入口。4.2合成存取方法从Objective-C 2.0开场,可自动生成设值方法和取值方法统称为存取方法。首
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号