1、本章目标了解Objective-C语言了解Objective-C的特点了解Cocoa相关框架掌握Xcode开发工具 理解Objective-C程序的基本结构Objective-C语言简介作为编程语言来说,Objective-C有悠久的历史。20世纪80年代初,Brad Cox和Tom Love 以SmallTalk-80语言为基础发明了Objective-C。Objective-C在C语言的基础上添加了扩展,成为了能够创建和操作对象的一门新的程序设计语言。1988年,苹果公司前CEO乔布斯的NeXT Computer公司获得了Objective-C语言的授权,并开发出了Objective-C的
2、语言库和一个名为NEXTSTEP的开发环境。1992年自由软件基金会的GNU支持Objective-C。Objective-C语言简介1994年,NeXT Computer和Sun Microsystem联合发布一个针对NEXTSTEP系统的标准典范OPENSTEP。2019年12月20日,苹果公司收购NeXT Software公司,NEXTSTEP/OPENSTEP环境成为苹果操作系统主要发行版本OS X的基础。这个版本的开发环境被苹果公司称为Cocoa。2019年7月,苹果发布Objective-C 2.0,增加了垃圾收集(只支持OS X系统)、属性、快速枚举等语法功能,改进了运行时性能,
3、并添加了对64位系统的支持。Objective-C语言特点Objective-C与其它面向对象语言有一些明显的不同,它有这自己鲜明的特色:兼容性:Objective-C可以说是一种面向对象的C语言,在Objective-C的代码中可以有C和C+语句,它可以调用C的函数,也可以通过C+对象访问方法。字符串:Objective-C通常不使用C语言风格的字符串。大多数情况下是使用Foundation框架的NSString类型的字符串。NSString类提供了字符串的类包装,支持Unicode,printf风格的格式化工具等等。它是在普通的双引号字符串前放置一个符号,如下面的例子所示:NSString
4、*myString=My Stringn;Objective-C语言特点类:Objective-C是一种面向对象的语言,定义类是它的基本能力。Objective-C的类声明和实现包括两个部分:接口部分和实现部分。不允许多继承。方法:Objective-C是一种面向对象的语言,定义方法也是它的基本能力。Objective-C中方法不是在“.”运算符,而是采用“”运算符。有时候方法调用也称为:消息发送。属性:属性是Objective-C 2.0提出的概念,它是替代对成员变量访问的“读取方法(getter)”和“设定方法(setter)”的手段,为了对类进行封装一般情况下不直接访问成员变量,而是通过
5、属性访问。Objective-C语言特点协议:Objective-C中的协议类似于Java中的接口或C+的纯虚类,只有接口部分定义没有实现部分,即只有h文件没有m文件。分类:Objective-C中的分类是类似与继承机制,通过分类能够扩展父类的功能。Objective-C语言特点Objective-C是非常”实用”的语言,它使用一个用c写成的很小的运行库,oc写成的程序通常不会比其源代码和函数库大太多。Objective-C可以在现存C编译器基础上实现,而不需要编写一个全新的编译器,这个特性使得oc能利用大量现存的c代码、库、工具和编程思想等资源。Objective-C语言特点不支持命名空间机
6、制(namespace mechanism)。取而代之的是程序开发者必须在其类别名称加上前缀,由于前缀往往较短(相对命名空间),这经常引致冲突,在2019年,在Cocoa编程环境中,所有Mac OS X类别和函数均有“NS”作为前缀,例如NSObject来分辨他们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发定下的。Foundation工具包简称为“Foundation”,首先出现在OpenStep中。在Mac OS X中,它是基于Core Foundation的。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计
7、算,事件循环,以及一些其它的与图形用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NeXTSTEP。它可以在Mac OS X和iOS中使用。Cocoa简介Cocoa是苹果公司的面向对象的开发环境,该环境下的任何类都要继承自NSObject(只有这样,该类的对象才可以获得运行时的基本能力);Cocoa的主要开发语言是Objective-C;Cocoa包含两个核心框架:Foundation框架和Appkit框架。AppKit(AppApplicationKitKit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序与图形用户界面交互所需的代码,它是基于F
8、oundation建立的,也使用“NS”前缀。它只能在Mac OS X中使用。Cocoa Touch简介Cocoa Touch包含两个框架:Foundation框架和UIKit框架。由苹果公司提供的软件开发API,用于开发 iphone/ipod/ipad上的软件。也是苹果公司针对iPhone应用程序快速开发提供的一个类库。此库以一系列框架库的形式存在,支持开发人员使用用户界面元素构建图像化的事件驱动的应用程序。Cocoa Touch简介Cocoa Touch 框架推动了ios应用程序的开发,为开发者提供了很多 Mac 平台上久经考验的模式,同时又特别专注于基于触摸的开发接口和性能优化。其中,
9、UIKit 提供了开发 iOS 上的图形化事件驱动程序所需的基本工具。iOS 独特的界面意味着 Cocoa Touch 具有同样独特的设计。通过 UIKit,可以访问 iOS 上特殊的 GUI 控制、按钮和全屏幕视图;还可以通过加速计和 Multi-Touch 手势控制应用程序。Objective-C开发工具苹果软件的开发需要在MAC OS X环境下进行,集成开发环境为XCODE,当前支持IPHONE4的开发版本为4.2以上,我们实验室版本4.6.X。IOS是MAC操作系统的一个子集。MAC系统不同,所支持的XCODE版本不同,请看好类型后再下载。MAC系统有中文版本,但是XCODE没有中文开
10、发版本,所以Xcode:是苹果公司的集成开发环境的发动机,它负责绝大多数的开发工作Inteface Builder:它是一个用于创建用户界面的图形工具;iphone模拟器:当临时查看效果时,可以很方便地使用模拟器进行查看;在开发中,Xcode与Inteface Builder是紧密结合的。iphone模拟器Inteface BuilderXcodeXcode开发工具XCODE欢迎界面欢迎界面Xcode开发工具XCODE创建项目界面创建项目界面Xcode开发工具XCODE运行界面运行界面例1:第一个OC程序-Hello,World#import int main(int argc,const c
11、har*argv)autoreleasepool /insert code here.NSLog(Hello,World!);return 0;程序说明#import 告诉编译器导入Foundation框架中的Foundation.h主头文件。在 Objective-C 中,#import 被当成#include指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。使用哪一个还是由用户来决定。一般来说,在导入 Objective-C 头文件的时候使用#import,包含 C 头文件时使用#include。程序说明int main(int a
12、rgc,const char*argv)每一个程序有且只有一个main函数,表示程序将在何处开始执行,即程序的开始执行位置。return 0;0:程序正常 非0:通常表示出现了一些问题(如:很可能无法找到程序所需的文件)程序说明autoreleasepool自动释放池,用于内存管理程序说明/insert code here.注释单行注释:使用连续的斜杠(/)多行注释:使用/*开头,*/结尾不能嵌套使用好处 比较清晰的指出该断程序用意 有利于团队合作,有利于后期的代码维护程序编译时,不对注释做任何处理;程序说明NSLog(Hello,World!);NSLog是Objective-C库中的一个函
13、数作用:向控制台输出文本内容,附带显示内容:执行的时间、程序名等等NSString对象 符号在位于一对双引号的字符串前面注意:Objective-C大小写敏感;程序语句必须以(;)结束常见扩展名.h头文件.cc语言源文件.cpp c+语言的源文件.mObjective-C的源文件.mmObjective-C+的源文件例2:计算50和20的和#import int main(int argc,const char*argv)autoreleasepool int sum;sum=50+20;NSLog(“50+20=%d,sum);return 0;常量:程序运行过程中,值不能被改变的量称为常量
14、。如:1,-1,2.5,c等等。变量:是一段有名字的连续存储空间。在源代码中通过定义变量来申请并命名这样的存储空间,并通过变量的名字来使用这段存储空间。变量是程序中数据的临时存放场所。如:int sum;变量应该有名字,变量命名规范:la-z,A-Z,0-9,_;l首字母不能是数字;l不可以用系统保留字;l比较推荐的命名规范;1.首字母一般小写;关键字:已经定义好的,具有特殊意义和用途的标识符,又称“保留字”。如:int,float,id,if,for,continue,return,interface,self,super,implementation,public,private等数据类型
15、:int,float,double,BOOL,char,NSString,id,nil,SEL等;运算符l算术运算符 ()l关系运算符 (=l逻辑运算符 (!&|)l条件运算符 (?:)l求字节数运算符 (sizeof)l自增、自减运算符 (+-)l 赋值运算符 (=)格式化输出字符%dint%cchar%ffloat%对象转义字符及其作用字符形式含义”双引号单引号n换行t水平制表符反斜线例3:下面两个程序输出结果是否相同#import int main(int argc,const char*argv)autoreleasepool NSLog(Testing);NSLog(.1);NSLog(.2);NSLog(.3);return 0;#import int main(int argc,const char*argv)autoreleasepool NSLog(nTesting.n.1n.2n.3);return 0;作业打印出100-200范围内的所有素数。编写一个函数sort_test(),能实现任何整型数组元素的排序(从小到大)。