关于我们
书单推荐
新书推荐
|
Objective-C程序设计-第6版
《Objective-C程序设计》是为在苹果iOS和OS X平台上,使用Objective-C语言和面向对象程序设计模式进行专业开发而编写的简洁、细致的入门读物。本书假设读者无面向对象程序语言或C语言编程经验,以保障初学者与有经验的程序员一样,可用本书迅速和有效地学习Objective-C。本书提供的学习方法独特,结合众多程序示例及章末练习,使得《Objective-C程序设计(第6版)》同时适合自学和课堂教学。第6版已全面更新,充分纳入Objective-C的新功能与技术,同时覆盖对新版Xcode、iOS和Mac OS X Mavericks的介绍。
Objective-C已经成为Mac OS X与iOS平台上开发应用程序的标准程序设计语言。这一简单但强大的面向对象语言是以C语言为基础的。Objective-C除了可在Apple的操作系统平台上使用外,也适用于其他的操作系统,包括 Linux、UNIX 以及Windows。
本书是针对初学者编写的一个完整又循序渐进的Objective-C语言权威入门。阅读本书,不需要先学过C语言或其他面向对象语言。本书包含许多详细且实用的范例,用来告诉你如何在实践中运用Objective-C。 本书第6版的内容已全面更新,覆盖新版iOS 、Xcode及OS X Mavericks等所有重要升级要点。 本书完整展示如何利用Foundation framework所提供的丰富自带类库(Library of classes),并对iOS 程序设计原理有所讲解。
预览目录
1引言 1 第一部分Objective-C语言 2Objective-C编程 9 3类、对象和方法 29 4数据类型和表达式 53 5循环结构 73 6选择结构 95 7类 129 8继承 155 9多态、动态类型和动态绑定 181 10变量和数据类型 199 11分类和协议 223 12预处理程序 239 13基本的C语言特性 253 第二部分Foundation框架 14Foundation框架简介 311 15数字、字符串和集合 315 16使用文件 379 17内存管理和自动引用计数 409 18复制对象 423 19归档 435 第三部分Cocoa、Cocoa Touch与iOS的SDK 20Cocoa和Cocoa Touch简介 453 21编写iOS应用程序 457 附录A术语表 489 附录B地址簿示例源代码 501 目录 1引言 1 1.1 本书内容 2 1.2 本书组织方式 3 1.3 支持 5 1.4 致谢 6 1.5 第6版前言 7 第一部分Objective-C语言 2Objective-C编程 9 2.1 编译并运行程序 9 2.1.1 使用Xcode 10 2.1.2 使用Terminal 17 2.2 解释第一个程序 20 2.3 显示变量的值 24 2.4 小结 26 2.5 练习 27 3类、对象和方法 29 3.1 到底什么是对象 29 3.2 实例和方法 30 3.3 用于处理分数的Objective-C类 32 3.4 @interface部分 35 3.4.1 选择名称 35 3.4.2 类方法和实例方法 37 3.5 @implementation部分 39 3.6 program部分 41 3.7 实例变量的访问及数据封装 47 3.8 小结 51 3.9 练习 51 4数据类型和表达式 53 4.1 数据类型和常量 53 4.1.1 int类型 53 4.1.2 float类型 54 4.1.3 char类型 54 4.1.4 限定词:long、long long、short、unsigned及signed 55 4.1.5 id类型 56 4.2 算术表达式 57 4.2.1 运算符的优先级 57 4.2.2 整数运算和一元负号运算符 60 4.2.3 模运算符 62 4.2.4 整型值和浮点值的相互转换 63 4.2.5 类型转换运算符 65 4.3 赋值运算符 66 4.4 Calculator类 67 4.5 练习 70 5循环结构 73 5.1 for语句 74 5.1.1 键盘输入 81 5.1.2 嵌套的for循环 83 5.1.3 for循环的变体 85 5.2 while语句 86 5.3 do语句 90 5.4 break语句 92 5.5 continue语句 92 5.6 小结 93 5.7 练习 93 6选择结构 95 6.1 if语句 95 6.1.1 if-else结构 100 6.1.2 复合条件测试 103 6.1.3 嵌套的if语句 106 6.1.4 else if结构 107 6.2 switch语句 117 6.3 Boolean变量 120 6.4 条件运算符 125 6.5 练习 127 7类 129 7.1 分离接口和实现文件 129 7.2 合成存取方法 135 7.3 使用点运算符访问属性 137 7.4 具有多个参数的方法 139 7.4.1 不带参数名的方法 141 7.4.2 关于分数的操作 141 7.5 局部变量 145 7.5.1 方法的参数 146 7.5.2 static关键字 147 7.6 self关键字 150 7.7 在方法中分配和返回对象 151 7.7.1 扩展类的定义和接口文件 153 7.8 练习 153 8继承 155 8.1 一切从根类开始 155 8.1.1 找出正确的方法 159 8.2 通过继承来扩展:添加新方法 160 8.2.1 Point类和对象创建 164 8.2.2 @class指令 165 8.2.3 具有对象的类 169 8.3 覆写方法 173 8.3.1 选择哪种方法 174 8.4 抽象类 177 8.5 练习 178 9多态、动态类型和动态绑定 181 9.1 多态:相同的名称,不同的类 181 9.2 动态绑定和id类型 184 9.3 编译时和运行时检查 186 9.4 id数据类型与静态类型 187 9.4.1 动态类型的参数和返回类型 188 9.5 有关类的问题 189 9.6 使用@try处理异常 194 9.7 练习 196 10变量和数据类型 199 10.1 对象的初始化 199 10.2 作用域回顾 203 10.2.1 关于属性、存取方法和实例变量 203 10.2.2 全局变量 204 10.2.3 静态变量 206 10.3 枚举数据类型 208 10.4 typedef语句 212 10.5 数据类型转换 213 10.5.1 转换规则 213 10.6 位运算符 215 10.6.1 按位与运算符 216 10.6.2 按位或运算符 217 10.6.3 按位异或运算符 218 10.6.4 一次求反运算符 218 10.6.5 向左移位运算符 220 10.6.6 向右移位运算符 221 10.7 练习 221 11分类和协议 223 11.1 分类 223 11.2 类的扩展 228 11.2.1 关于分类的注意事项 229 11.3 协议和代理 230 11.3.1 代理 233 11.3.2 非正式协议 234 11.4 合成对象 235 11.5 练习 236 12预处理程序 239 12.1 #define语句 239 12.1.1 更高级的定义类型 241 12.2 #import语句 246 12.3 条件编译 247 12.3.1 #ifdef、#endif、#else和#ifndef语句 248 12.3.2 #if和#elif预处理程序语句 250 12.3.3 #undef语句 251 12.4 练习 251 13基本的C语言特性 253 13.1 数组 254 13.1.1 数组元素的初始化 256 13.1.2 字符数组 257 13.1.3 多维数组 258 13.2 函数 260 13.2.1 参数和局部变量 262 13.2.2 函数的返回结果 263 13.2.3 函数、方法和数组 267 13.3 块(Blocks) 268 13.4 结构 272 13.4.1 结构的初始化 275 13.4.2 结构中的结构 276 13.4.3 关于结构的补充细节 278 13.4.4 不要忘记面向对象编程思想 279 13.5 指针 279 13.5.1 指针和结构 283 13.5.2 指针、方法和函数 285 13.5.3 指针和数组 287 13.5.4 指针运算 297 13.5.5 指针和内存地址 299 13.6 它们不是对象 299 13.7 其他语言特性 300 13.7.1 复合字面量 300 13.7.2 goto语句 301 13.7.3 空语句 301 13.7.4 逗号运算符 301 13.7.5 sizeof运算符 302 13.7.6 命令行参数 303 13.8 工作原理 305 13.8.1 事实#1:实例变量存储在结构中 306 13.8.2 事实#2:对象变量实际上是指针 306 13.8.3 事实#3:方法是函数,而消息表达式是函数调用 307 13.8.4 事实#4:id类型是通用指针类型 307 13.9 练习 307 第二部分Foundation框架 14Foundation框架简介 311 14.1 Foundation文档 311 15数字、字符串和集合 315 15.1 数字对象 315 15.2 字符串对象 321 15.2.1 NSLog函数 321 15.2.2 description方法 322 15.2.3 可变对象与不可变对象 323 15.2.4 可变字符串 330 15.3 数组对象 336 15.3.1 制作地址簿 341 15.3.2 数组排序 358 15.4 词典对象 364 15.4.1 枚举词典 366 15.5 集合对象 369 15.5.1 NSIndexSet 373 15.6 练习 375 16使用文件 379 16.1 管理文件和目录:NSFileManager 380 16.1.1 使用NSData类 385 16.1.2 使用目录 386 16.1.3 枚举目录中的内容 389 16.2 使用路径:NSPathUtilities.h 391 16.2.1 常用的路径处理方法 394 16.2.2 复制文件和使用NSProcessInfo类 396 16.3 基本的文件操作:NSFileHandle 400 16.4 NSURL类 405 16.5 NSBundle类 406 16.6 练习 407 17内存管理和自动引用计数 409 17.1 自动垃圾收集 411 17.2 手工管理内存计数 411 17.2.1 对象引用和自动释放池 412 17.3 事件循环和内存分配 414 17.4 手工内存管理规则的总结 416 17.5 自动引用计数(ARC) 417 17.6 强变量 418 17.7 弱变量 419 17.8 @autoreleasepool块 420 17.9 方法名和非ARC编译代码 420 18复制对象 423 18.1 copy和mutableCopy方法 424 18.2 浅复制与深复制 426 18.3 实现 18.4 用设值方法和取值方法复制对象 431 18.5 练习 433 19归档 435 19.1 使用XML属性列表进行归档 435 19.2 使用NSKeyedArchiver归档 437 19.3 编码方法和解码方法 439 19.4 使用NSData创建自定义档案 446 19.5 使用归档程序复制对象 450 19.6 练习 451 第三部分Cocoa、Cocoa Touch与iOS的SDK 20Cocoa和Cocoa Touch简介 453 20.1 框架层 453 20.2 Cocoa Touch 454 21编写iOS应用程序 457 21.1 iOS SDK 457 21.2 第一个iPhone应用程序 457 21.2.1 创建新的iPhone应用程序项目 460 21.2.2 输入代码 463 21.2.3 设计界面 466 21.3 iPhone分数计算器 474 21.3.1 启动新的Fraction_Calculator项目 475 21.3.2 定义视图控制器 476 21.3.3 Fraction类 481 21.3.4 处理分数的Calculator类 485 21.3.5 设计UI 486 21.4 小结 487 21.5 练习 488 附录A术语表 489 附录B地址簿示例源代码 501
C程序设计语言是由AT&T贝尔实验室的Dennis Ritchie于20世纪70年代早期首创的。但是,直到20世纪70年代晚期,这种程序设计语言才获得了广泛的支持并流行开来。因为在此之前,C编译器还不能用于贝尔实验室以外的商业用途。最初,UNIX操作系统有可能更快的普及速度也在某种程度上促进了C语言的快速普及,UNIX操作系统几乎完全是由C语言编写的。
Brad J.Cox在20世纪80年代早期设计了Objective-C语言,它以一种叫作SmallTalk-80的语言为基础。Objective-C在C语言的基础上加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象的创建和操作。 1988年,NeXT计算机公司获得了Objective-C语言的授权,并发展了Objective-C的语言库和一个开发环境,即NEXTSTEP。1992年,自由软件基金会的GNU开发环境增加了对Objective-C的支持。所有Free Software Foundation(FSF)产品的版权归FSF所有。它以GNU通用公共许可证来发布产品。 1994年,NeXT计算机公司 和Sun公司联合发布了一个针对NEXTSTEP系统的标准规范,名为OPENSTEP。OPENSTEP在FSF’s的实现名称为GNUStep。有一个Linux版本,它包括Linux内核和GNUStep开发环境,这个Linux发行版被十分贴切地命名为LinuxSTEP。 1996年12月20日,苹果公司宣布收购NeXT软件公司,NEXTSTEP/OPENSTEP环境将成为苹果操作系统下一个主要发行版本OS X的基础。这个开发环境的版本被苹果公司称为Cocoa。它内置了对Objective-C语言的支持,并结合了Project Builder(或它的后继版本Xcode)和Interface Builder等开发工具,苹果公司为Mac OS X上的应用程序开发创建了一个功能强大的开发环境。 2007年,苹果公司发布了Objective-C语言的升级版,并称为Objective-C 2.0。本书第2版已涵盖了该版本语言的内容。 当iPhone于2007年发布时,开发人员们要求为这款革新性的设备开发应用程序。起初,苹果公司不欢迎第三方应用程序开发。苹果公司安抚那些超级崇拜iPhone的开发人员的办法,就是允许他们开发基于Web的应用。这些基于Web的应用在iPhone内置的Safari Web浏览器下运行,但需要用户连接到托管该应用程序的网站。基于Web应用的很多固有限制,开发人员对此非常不满,于是苹果公司不久之后就宣布,开发人员能够为iPhone开发所谓的本机应用。 本机应用是驻留在iPhone上并且在iPhone操作系统下运行的应用,其运行方式与该设备上运行的内置iPhone应用(如Contacts、Stocks和Weather)相同。iPhone的操作系统实际上是某个OS X版本,这意味着可以在MacBook Pro上开发并调试这些应用。实际上,苹果公司很快就提供了强大的软件开发套件(SDK),允许快速开发iPhone应用并进行调试。iPhone模拟器使得开发人员能够直接在开发系统上调试其应用,而无须在真机设备上进行。 随着2010年iPad的推出,苹果公司开始统一操作系统上使用的术语和SDK,以支持使用不同尺寸的物理屏幕和屏幕分辨率的各种设备。在本书写作时已能够通过iOS SDK为各种iOS设备开发应用程序,当前发布的操作系统版本为iOS 7。 1.1 本书内容 在计划编写这本有关Objective-C的图书时,我必须做出一些基本的决策。和其他介绍Objective-C的内容一样,可以假定读者已经知道如何编写C语言程序。可以从使用丰富的例程库(例如,Foundation框架和UIKit框架)的角度介绍这门语言。介绍如何使用一些开发工具(如Mac的Xcode和设计UI使用的Interface Builder等)。 但是采用这种方式有一些问题:首先,学习Objective-C之前必须完整地学习C语言,这种说法是错误的。C语言是一门过程性的编程语言,有很多特性是在使用Objective-C进行程序设计时不必要的,特别是对于初学者。事实上,采用其中的某些特性违反了坚持良好的面向对象的程序设计方法的本质。同样,在学习面向对象的编程语言之前,最好不要了解过程性语言的所有细节。这会导致程序员误入歧途,并在养成良好的面向对象的程序设计风格方面造成错误的导向和思维定式。Objective-C是C语言的扩展,但这并不意味着必须首先学习C语言。 因此,我既不首先讲述C语言,也不事先假定你具备了该语言的知识。相反,我决定采用一种非常规的方式,从面向对象编程的视角出发,将Objective-C和基础的C语言作为一门单独的集成语言来讲解。顾名思义,本书的目的是教你如何使用Objective-C 进行程序设计。这并不表示我会详细介绍可用于开发和调试程序的工具,或者讲解如何开发交互式图形应用。学会如何使用Objective-C编写程序后,所有的这些资料都可在其他地方获得。事实上,你会发现在具备了如何使用Objective-C进行程序设计的坚实基础后,掌握这些知识是轻而易举的。本书并不假设读者需要编程经验,即使有,也不会很多。如果你是一名程序设计的初学者,通过一些努力,你应该可以将Objective-C作为第一门程序设计语言。根据本书前几版的反馈,其他读者已经做到了。 本书以示例的方式讲述Objective-C语言。在介绍这门语言的每个新特性时,通常会提供一个完整的小例子来阐述这一特性。正如“一图胜千言”一样,一个经过严格筛选的例子也有如此功效。强烈建议运行每个程序,并比较系统中获得的结果与本书中的结果。这么做,你不仅可以学会Objective-C语言及其语法,而且还能熟悉编译和运行Objective-C程序的过程。 1.2 本书组织方式 本书从逻辑上分为三部分:第一部分(第1~13章)是“Objective-C语言”,介绍该语言的基础知识。第二部分(第14~19章)是“Foundation框架”,讲述如何使用构成Foundation框架的种类丰富的预定义。第三部分(第20、21章)是“Cocoa、Cocoa Touch和iOS SDK”,简要介绍Cocoa和Cocoa Touch框架,然后逐步演示如何使用iOS SDK开发简单的iOS应用。 框架就是一组从逻辑上组合在一起的类和例程,它们使开发程序变得更加容易。使用Objective-C进行程序设计时需要的许多能力都来源于大量可用的框架。 第2章“Objective-C编程”,首先讲述如何使用Objective-C编写第一个程序。 因为本书并非主要讲解Cocoa或者iOS程序设计,所以在第三部分之前没有过多地介绍图形用户界面(GUI),甚至很少提及它。这就需要使用一种方法实现程序输入并产生输出。本书中的大多数例子都是从键盘获得输入,并在一个窗口中产生输出的:如果在命令行中,那么这个窗口是Terminal窗口;如果使用Xcode,那么这个窗口是调试输出窗口。 第3章“类、对象和方法”,介绍了面向对象程序设计的基础。本章引入了一些术语,但数量控制到了最少。另外还介绍了定义类的机制,以及向实例或对象发送消息的方式。教师或者有经验的Objective-C程序员将会注意到,本书使用静态类型声明对象。我认为这种方法是学生起步的最好方式,因为编译器能捕捉更多的错误,程序有更强的自文档化(self-documenting)功能,同时还能鼓励新程序员显式地声明已知的数据类型。这样,id类型的概念及其强大功能直到第9章“多态、动态类型和动态绑定”才会完全展现出来。 第4章“数据类型和表达式”,描述了基本的Objective-C数据类型,以及如何在程序中使用它们。 第5章“循环结构”,介绍了在程序中可以使用的3种循环语句,即for、while和do。 第6章“选择结构”,详细讲述了Objective-C语言的if和switch语句。判断语句是任何计算机程序设计语言的基础。 第7章“类”,更深入地研究了类和对象的使用,详细讨论了方法、方法的多个参数及局部变量的相关内容。 第8章“继承”,介绍了继承的主要概念。这一特性使得程序更容易开发,因为我们可以利用以前编写的代码,使用继承及子类的概念可以方便地修改和扩展现有的类定义。 第9章讨论了Objective-C语言的3个重要特性。多态、动态类型及动态绑定是本章的关键概念。 第10章至第13章对Objective-C进行了深入讨论,既包含对象的初始化、区块、协议、分类、预处理程序,还包括一些基本的C语言特性,如函数、数组、结构和指针。第一次开发面向对象的程序时,通常不必(最好避免)使用这些特性。建议你首次通读本书时略过第13章,只在需要更多地了解这门语言的特殊特性时,再回来学习它。 第二部分从第14章开始,这部分介绍Foundation框架,以及如何使用它的大量文档。 第15章至第19章讲解了Foundation框架的重要特性,包括数字和字符串对象、集合、文件系统、内存管理及对象的复制和归档。 学习完第二部分后,你将能够使用Foundation框架开发出相当复杂的Objective-C程序。 第三部分从第20章“Cocoa和Cocoa Touch简介”开始,本章简要介绍了框架,它提供了在Mac和iOS设备上开发复杂图形应用所需的各种类。 第21章介绍了iOS SDK和UIKit框架。本章阐述了如何以迭代的方式编写简单的iOS应用,然后列举了一个计算器应用的示例,通过它可使用iPhone进行简单的分数算术运算。 因为面向对象的用语涉及大量术语,所以本书附录A提供了一些常用术语的定义。 附录B“地址簿示例源代码”,给出了本书第二部分中开发并大量使用的两个类的源代码。这些类定义了地址卡和地址簿类,其中的方法提供了一些简单的操作,如在地址簿中添加和删除地址卡、查找某人、列出地址簿的内容等。 学会如何编写Objective-C程序后,可以继续向几个不同的方向发展。你可能希望学习有关C语言的更多内容,或开始编写在OS X上运行的Cocoa程序,或者你可能想开发更复杂的iOS应用。 1.3支持 读者可在classroomM.com/objective-c论坛查找到更加丰富的内容,可以获取到一些源代码(这里并不能找到所有例子的“官方”源代码,本人坚信学习过程的最大一部分在于自己输入例子中的程序,并且学习如何判断和修正错误)、练习的答案、勘误表和测验题;也可以向我或其他论坛中的成员提问题。这个论坛有积极的成员,他们乐于帮助其他成员解决疑问,并且答复一些问题,使之变成内容丰富的社区。请加入并参与进来吧! 1.4 致谢 我要感谢在本书第 1 版的准备阶段为我提供帮助的朋友们。首先,要感谢Tony Iannino和Steven Levy对原稿的审阅,并感谢Mike Gaines对本书的贡献。 其次,还要感谢本书的技术编辑Jack Purdum(第1版),Wendy Mui(第3版)和Mike Trent(第1,2,5,6版)。我格外地幸运,因为Mike审阅了本书的两个版本,他对我编写的本书前两版都进行了最详细的审阅,不仅指出了书中的不足之处,而且还十分慷慨地提出了建议。正是因为Mike对第1版提供的意见,我改变了介绍内存管理的方法,并尽力确保本书中的每个示例都是“无漏洞的”。在第4版之前,内存管理是比较重要的内容,但引入ARC后,这部分内容变得过时了。Mike还为有关iPhone程序设计的章节做出了很多贡献。 在第1版中,Catherine Babin提供了封面的图片,他还提供了许多有价值的图片供我选择。朋友为我制作的封面的艺术效果,使得本书具有更强的专业性。 我非常感谢Pearson的Mark Taber(所有的版本),他忍受了我的推迟交稿,并且非常和蔼地让我按照自己的进度工作。同样的荣誉给皮尔逊的Mandie Frank。Mandie为我的延迟交付不知疲倦地工作,以帮助本书的各种版本及时出版。我非常感谢Michael de Haan和Wendy Mui不可思议地主动要求完成校对第2版的工作。 注意 正如先前介绍的,Dennis Ritchie发明了C语言,他也是UNIX操作系统的共同发明者,这是OS X和iOS的基础。但遗憾的是,2011年,在一个星期内这个世界失去了Dennis Ritchie和Steve Jobs。这两位对我的职业生涯有重大的影响。如果没有他们,这本书也就不存在。 最后,我要感谢classroomM.com/objective-c论坛的会员对我的反馈、支持和鼓励。 1.5 第6版前言 上个版本没有多少变化。由于Xcode 5的引入,所有的截图已被更新。我这样做是为了让新手也能跟随当前截图,不至于在学习之前迷茫!有一些语言细节的增加,也已反映在此版中。 Stephen G.Kochan 2013年10月
你还可能感兴趣
我要评论
|