编辑推荐

  Objective-C已经成为MacOSX与iOS平台上开发应用程序的标准程序设计语言。这一简单但强大的面向对象语言是以C语言为基础的。Objective-C除了可在Apple的操作系统平台上使用外,也适用于其他的操作系统,包括Linux、UNIX以及Windows。

  《Objective-C程序设计(第6版)》是针对初学者编写的一个完整又循序渐进的Objective-C语言专业入门。阅读《Objective-C程序设计(第6版)》,不需要先学过C语言或其他面向对象语言。《Objective-C程序设计(第6版)》包含许多详细且实用的范例,用来告诉你如何在实践中运用Objective-C。

  《Objective-C程序设计(第6版)》第6版的内容已全面更新,覆盖新版iOS、Xcode及OSXMavericks等所有重要升级要点。

  《Objective-C程序设计(第6版)》完整展示如何利用Foundationframework所提供的丰富自带类库(Libraryofclasses),并对iOS程序设计原理有所讲解。

内容简介

  《Objective-C程序设计(第6版)》是为在苹果iOS和OSX平台上,使用Objective-C语言和面向对象程序设计模式进行专业开发而编写的简洁、细致的入门读物。《Objective-C程序设计(第6版)》假设读者无面向对象程序语言或C语言编程经验,以保障初学者与有经验的程序员一样,可用《Objective-C程序设计(第6版)》迅速和有效地学习Objective-C。《Objective-C程序设计(第6版)》提供的学习方法独特,结合众多程序示例及章末练习,使得《Objective-C程序设计(第6版)》同时适合自学和课堂教学。第6版已全面更新,充分纳入Objective-C的新功能与技术,同时覆盖对新版Xcode、iOS和MacOSXMavericks的介绍。

作者简介

  StephenG.Kochan,是多本畅销书的作者或合著者,其中有关于C语言的,包括ProgramminginC、ProgramminginANSIC和TopicsinCProgramming,也有关于UNIX的,包括ExploringtheUNIXSystem和UNIXShellProgramming。从1984年Mac最初引进时,他就已经在Macintosh计算机上编程了,他编写的ProgrammingCfortheMac是ApplePressLibrary的一部分。2003年,Kochan编写了ProgramminginObjective-C,之后编写了另一本与Mac有关的书籍BeginningAppleScript。

精彩书评

  ★这是我读过的介绍程序语言书中较好的一本,如果你想学Objective-C,切莫犹豫!

  ——CalvinWolcott

目录

1引言

第一部分Objective-C语言
2Objective-C编程
3类、对象和方法
4数据类型和表达式
5循环结构
6选择结构
7类
8继承
9多态、动态类型和动态绑定
10变量和数据类型
11分类和协议
12预处理程序
13基本的C语言特性

第二部分Foundation框架
14Foundation框架简介
15数字、字符串和集合
16使用文件
17内存管理和自动引用计数
18复制对象
19归档

第三部分Cocoa、CocoaTouch与iOS的SDK
20Cocoa和CocoaTouch简介
21编写iOS应用程序
附录A术语表
附录B地址簿示例源代码
目录
1引言
1.1《Objective-C程序设计(第6版)》内容
1.2《Objective-C程序设计(第6版)》组织方式
1.3支持
1.4致谢
1.5
第6版前言

第一部分Objective-C语言
2Objective-C编程
2.1编译并运行程序
2.1.1使用Xcode
2.1.2使用Terminal
2.2解释
第一个程序
2.3显示变量的值
2.4小结
2.5练习
3类、对象和方法
3.1到底什么是对象
3.2实例和方法
3.3用于处理分数的Objective-C类
3.4@interface部分
3.4.1选择名称
3.4.2类方法和实例方法
3.5@implementation部分
3.6program部分
3.7实例变量的访问及数据封装
3.8小结
3.9练习
4数据类型和表达式
4.1数据类型和常量
4.1.1int类型
4.1.2float类型
4.1.3char类型
4.1.4限定词:long、longlong、short、unsigned及signed
4.1.5id类型
4.2算术表达式
4.2.1运算符的优先级
4.2.2整数运算和一元负号运算符
4.2.3模运算符
4.2.4整型值和浮点值的相互转换
4.2.5类型转换运算符
4.3赋值运算符
4.4Calculator类
4.5练习
5循环结构
5.1for语句
5.1.1键盘输入
5.1.2嵌套的for循环
5.1.3for循环的变体
5.2while语句
5.3do语句
5.4break语句
5.5continue语句
5.6小结
5.7练习
6选择结构
6.1if语句
6.1.1if-else结构
6.1.2复合条件测试
6.1.3嵌套的if语句
6.1.4elseif结构
6.2switch语句
6.3Boolean变量
6.4条件运算符
6.5练习
7类
7.1分离接口和实现文件
7.2合成存取方法
7.3使用点运算符访问属性
7.4具有多个参数的方法
7.4.1不带参数名的方法
7.4.2关于分数的操作
7.5局部变量
7.5.1方法的参数
7.5.2static关键字
7.6self关键字
7.7在方法中分配和返回对象
7.7.1扩展类的定义和接口文件
7.8练习
8继承
8.1一切从根类开始
8.1.1找出正确的方法
8.2通过继承来扩展:添加新方法
8.2.1Point类和对象创建
8.2.2@class指令
8.2.3具有对象的类
8.3覆写方法
8.3.1选择哪种方法
8.4抽象类
8.5练习
9多态、动态类型和动态绑定
9.1多态:相同的名称,不同的类
9.2动态绑定和id类型
9.3编译时和运行时检查
9.4id数据类型与静态类型
9.4.1动态类型的参数和返回类型
9.5有关类的问题
9.6使用@try处理异常
9.7练习
10变量和数据类型
10.1对象的初始化
10.2作用域回顾
10.2.1关于属性、存取方法和实例变量
10.2.2全局变量
10.2.3静态变量
10.3枚举数据类型
10.4typedef语句
10.5数据类型转换
10.5.1转换规则
10.6位运算符
10.6.1按位与运算符
10.6.2按位或运算符
10.6.3按位异或运算符
10.6.4一次求反运算符
10.6.5向左移位运算符
10.6.6向右移位运算符
10.7练习
11分类和协议
11.1分类
11.2类的扩展
11.2.1关于分类的注意事项
11.3协议和代理
11.3.1代理
11.3.2非正式协议
11.4合成对象
11.5练习
12预处理程序
12.1#define语句
12.1.1更高级的定义类型
12.2#import语句
12.3条件编译
12.3.1#ifdef、#endif、#else和#ifndef语句
12.3.2#if和#elif预处理程序语句
12.3.3#undef语句
12.4练习
13基本的C语言特性
13.1数组
13.1.1数组元素的初始化
13.1.2字符数组
13.1.3多维数组
13.2函数
13.2.1参数和局部变量
13.2.2函数的返回结果
13.2.3函数、方法和数组
13.3块(Blocks)
13.4结构
13.4.1结构的初始化
13.4.2结构中的结构
13.4.3关于结构的补充细节
13.4.4不要忘记面向对象编程思想
13.5指针
13.5.1指针和结构
13.5.2指针、方法和函数
13.5.3指针和数组
13.5.4指针运算
13.5.5指针和内存地址
13.6它们不是对象
13.7其他语言特性
13.7.1复合字面量
13.7.2goto语句
13.7.3空语句
13.7.4逗号运算符
13.7.5sizeof运算符
13.7.6命令行参数
13.8工作原理
13.8.1事实#1:实例变量存储在结构中
13.8.2事实#2:对象变量实际上是指针
13.8.3事实#3:方法是函数,而消息表达式是函数调用
13.8.4事实#4:id类型是通用指针类型
13.9练习

第二部分Foundation框架
14Foundation框架简介
14.1Foundation文档
15数字、字符串和集合
15.1数字对象
15.2字符串对象
15.2.1NSLog函数
15.2.2description方法
15.2.3可变对象与不可变对象
15.2.4可变字符串
15.3数组对象
15.3.1制作地址簿
15.3.2数组排序
15.4词典对象
15.4.1枚举词典
15.5集合对象
15.5.1NSIndexSet
15.6练习
16使用文件
16.1管理文件和目录:NSFileManager
16.1.1使用NSData类
16.1.2使用目录
16.1.3枚举目录中的内容
16.2使用路径:NSPathUtilities.h
16.2.1常用的路径处理方法
16.2.2复制文件和使用NSProcessInfo类
16.3基本的文件操作:NSFileHandle
16.4NSURL类
16.5NSBundle类
16.6练习
17内存管理和自动引用计数
17.1自动垃圾收集
17.2手工管理内存计数
17.2.1对象引用和自动释放池
17.3事件循环和内存分配
17.4手工内存管理规则的总结
17.5自动引用计数(ARC)
17.6强变量
17.7弱变量
17.8@autoreleasepool块
17.9方法名和非ARC编译代码
18复制对象
18.1copy和mutableCopy方法
18.2浅复制与深复制
18.3实现<NSCopying>协议
18.4用设值方法和取值方法复制对象
18.5练习
19归档
19.1使用XML属性列表进行归档
19.2使用NSKeyedArchiver归档
19.3编码方法和解码方法
19.4使用NSData创建自定义档案
19.5使用归档程序复制对象
19.6练习

第三部分Cocoa、CocoaTouch与iOS的SDK
20Cocoa和CocoaTouch简介
20.1框架层
20.2CocoaTouch
21编写iOS应用程序
21.1iOSSDK
21.2
第一个iPhone应用程序
21.2.1创建新的iPhone应用程序项目
21.2.2输入代码
21.2.3设计界面
21.3iPhone分数计算器
21.3.1启动新的Fraction_Calculator项目
21.3.2定义视图控制器
21.3.3Fraction类
21.3.4处理分数的Calculator类
21.3.5设计UI
21.4小结
21.5练习
附录A术语表
附录B地址簿示例源代码



前言/序言

  C程序设计语言是由AT&T贝尔实验室的DennisRitchie于20世纪70年代早期首创的。但是,直到20世纪70年代晚期,这种程序设计语言才获得了广泛的支持并流行开来。因为在此之前,C编译器还不能用于贝尔实验室以外的商业用途。最初,UNIX操作系统有可能更快的普及速度也在某种程度上促进了C语言的快速普及,UNIX操作系统几乎完全是由C语言编写的。
  BradJ.Cox在20世纪80年代早期设计了Objective-C语言,它以一种叫作SmallTalk-80的语言为基础。Objective-C在C语言的基础上加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象的创建和操作。
  1988年,NeXT计算机公司获得了Objective-C语言的授权,并发展了Objective-C的语言库和一个开发环境,即NEXTSTEP。1992年,自由软件基金会的GNU开发环境增加了对Objective-C的支持。所有FreeSoftwareFoundation(FSF)产品的版权归FSF所有。它以GNU通用公共许可证来发布产品。
  1994年,NeXT计算机公司和Sun公司联合发布了一个针对NEXTSTEP系统的标准规范,名为OPENSTEP。OPENSTEP在FSF’s的实现名称为GNUStep。有一个Linux版本,它包括Linux内核和GNUStep开发环境,这个Linux发行版被十分贴切地命名为LinuxSTEP。
  1996年12月20日,苹果公司宣布收购NeXT软件公司,NEXTSTEP/OPENSTEP环境将成为苹果操作系统下一个主要发行版本OSX的基础。这个开发环境的版本被苹果公司称为Cocoa。它内置了对Objective-C语言的支持,并结合了ProjectBuilder(或它的后继版本Xcode)和InterfaceBuilder等开发工具,苹果公司为MacOSX上的应用程序开发创建了一个功能强大的开发环境。
  2007年,苹果公司发布了Objective-C语言的升级版,并称为Objective-C2.0。《Objective-C程序设计(第6版)》第2版已涵盖了该版本语言的内容。
  当iPhone于2007年发布时,开发人员们要求为这款革新性的设备开发应用程序。起初,苹果公司不欢迎第三方应用程序开发。苹果公司安抚那些超级崇拜iPhone的开发人员的办法,就是允许他们开发基于Web的应用。这些基于Web的应用在iPhone内置的SafariWeb浏览器下运行,但需要用户连接到托管该应用程序的网站。基于Web应用的很多固有限制,开发人员对此非常不满,于是苹果公司不久之后就宣布,开发人员能够为iPhone开发所谓的本机应用。
  本机应用是驻留在iPhone上并且在iPhone操作系统下运行的应用,其运行方式与该设备上运行的内置iPhone应用(如Contacts、Stocks和Weather)相同。iPhone的操作系统实际上是某个OSX版本,这意味着可以在MacBookPro上开发并调试这些应用。实际上,苹果公司很快就提供了强大的软件开发套件(SDK),允许快速开发iPhone应用并进行调试。iPhone模拟器使得开发人员能够直接在开发系统上调试其应用,而无须在真机设备上进行。
  随着2010年iPad的推出,苹果公司开始统一操作系统上使用的术语和SDK,以支持使用不同尺寸的物理屏幕和屏幕分辨率的各种设备。在《Objective-C程序设计(第6版)》写作时已能够通过iOSSDK为各种iOS设备开发应用程序,当前发布的操作系统版本为iOS7。
  1.1《Objective-C程序设计(第6版)》内容
  在计划编写这本有关Objective-C的图书时,我必须做出一些基本的决策。和其他介绍Objective-C的内容一样,可以假定读者已经知道如何编写C语言程序。可以从使用丰富的例程库(例如,Foundation框架和UIKit框架)的角度介绍这门语言。介绍如何使用一些开发工具(如Mac的Xcode和设计UI使用的InterfaceBuilder等)。
  但是采用这种方式有一些问题:首先,学习Objective-C之前必须完整地学习C语言,这种说法是错误的。C语言是一门过程性的编程语言,有很多特性是在使用Objective-C进行程序设计时不必要的,特别是对于初学者。事实上,采用其中的某些特性违反了坚持良好的面向对象的程序设计方法的本质。同样,在学习面向对象的编程语言之前,最好不要了解过程性语言的所有细节。这会导致程序员误入歧途,并在养成良好的面向对象的程序设计风格方面造成错误的导向和思维定式。Objective-C是C语言的扩展,但这并不意味着必须首先学习C语言。
  因此,我既不首先讲述C语言,也不事先假定你具备了该语言的知识。相反,我决定采用一种非常规的方式,从面向对象编程的视角出发,将Objective-C和基础的C语言作为一门单独的集成语言来讲解。顾名思义,《Objective-C程序设计(第6版)》的目的是教你如何使用Objective-C进行程序设计。这并不表示我会详细介绍可用于开发和调试程序的工具,或者讲解如何开发交互式图形应用。学会如何使用Objective-C编写程序后,所有的这些资料都可在其他地方获得。事实上,你会发现在具备了如何使用Objective-C进行程序设计的坚实基础后,掌握这些知识是轻而易举的。《Objective-C程序设计(第6版)》并不假设读者需要编程经验,即使有,也不会很多。如果你是一名程序设计的初学者,通过一些努力,你应该可以将Objective-C作为第一门程序设计语言。根据《Objective-C程序设计(第6版)》前几版的反馈,其他读者已经做到了。
  《Objective-C程序设计(第6版)》以示例的方式讲述Objective-C语言。在介绍这门语言的每个新特性时,通常会提供一个完整的小例子来阐述这一特性。正如“一图胜千言”一样,一个经过严格筛选的例子也有如此功效。强烈建议运行每个程序,并比较系统中获得的结果与《Objective-C程序设计(第6版)》中的结果。这么做,你不仅可以学会Objective-C语言及其语法,而且还能熟悉编译和运行Objective-C程序的过程。
  1.2《Objective-C程序设计(第6版)》组织方式
  《Objective-C程序设计(第6版)》从逻辑上分为三部分:第一部分(第1~13章)是“Objective-C语言”,介绍该语言的基础知识。第二部分(第14~19章)是“Foundation框架”,讲述如何使用构成Foundation框架的种类丰富的预定义。第三部分(第20、21章)是“Cocoa、CocoaTouch和iOSSDK”,简要介绍Cocoa和CocoaTouch框架,然后逐步演示如何使用iOSSDK开发简单的iOS应用。
  框架就是一组从逻辑上组合在一起的类和例程,它们使开发程序变得更加容易。使用Objective-C进行程序设计时需要的许多能力都来源于大量可用的框架。
  第2章“Objective-C编程”,首先讲述如何使用Objective-C编写第一个程序。
  因为《Objective-C程序设计(第6版)》并非主要讲解Cocoa或者iOS程序设计,所以在第三部分之前没有过多地介绍图形用户界面(GUI),甚至很少提及它。这就需要使用一种方法实现程序输入并产生输出。《Objective-C程序设计(第6版)》中的大多数例子都是从键盘获得输入,并在一个窗口中产生输出的:如果在命令行中,那么这个窗口是Terminal窗口;如果使用Xcode,那么这个窗口是调试输出窗口。
  第3章“类、对象和方法”,介绍了面向对象程序设计的基础。本章引入了一些术语,但数量控制到了最少。另外还介绍了定义类的机制,以及向实例或对象发送消息的方式。教师或者有经验的Objective-C程序员将会注意到,《Objective-C程序设计(第6版)》使用静态类型声明对象。我认为这种方法是学生起步的最好方式,因为编译器能捕捉更多的错误,程序有更强的自文档化(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语言特性,如函数、数组、结构和指针。第一次开发面向对象的程序时,通常不必(最好避免)使用这些特性。建议你首次通读《Objective-C程序设计(第6版)》时略过第13章,只在需要更多地了解这门语言的特殊特性时,再回来学习它。
  第二部分从第14章开始,这部分介绍Foundation框架,以及如何使用它的大量文档。
  第15章至第19章讲解了Foundation框架的重要特性,包括数字和字符串对象、集合、文件系统、内存管理及对象的复制和归档。
  学习完第二部分后,你将能够使用Foundation框架开发出相当复杂的Objective-C程序。
  第三部分从第20章“Cocoa和CocoaTouch简介”开始,本章简要介绍了框架,它提供了在Mac和iOS设备上开发复杂图形应用所需的各种类。
  第21章介绍了iOSSDK和UIKit框架。本章阐述了如何以迭代的方式编写简单的iOS应用,然后列举了一个计算器应用的示例,通过它可使用iPhone进行简单的分数算术运算。
  因为面向对象的用语涉及大量术语,所以《Objective-C程序设计(第6版)》附录A提供了一些常用术语的定义。
  附录B“地址簿示例源代码”,给出了《Objective-C程序设计(第6版)》第二部分中开发并大量使用的两个类的源代码。这些类定义了地址卡和地址簿类,其中的方法提供了一些简单的操作,如在地址簿中添加和删除地址卡、查找某人、列出地址簿的内容等。
  学会如何编写Objective-C程序后,可以继续向几个不同的方向发展。你可能希望学习有关C语言的更多内容,或开始编写在OSX上运行的Cocoa程序,或者你可能想开发更复杂的iOS应用。
  StephenG.Kochan
  2013年10月

其他推荐