第1章 配置开发环境 2
1.1 Mac应用程序开发环境 2
1.2 iPhone应用程序的开发环境 3
1.3 查看安装目录中的内容 5
1.3.1 启动Xcode 6
1.3.2 启动Interface Builder 7
1.4 Mac中的基本操作 7
1.4.1 弹出菜单的显示方法 7
1.4.2 工具条的定制 9
第2章 开发工具 11
2.1 Xcode 11
2.1.1 综合开发环境Xcode的功能 11
2.1.2 工程窗口 12
2.1.3 文本编辑器的功能 16
2.1.4 开发者手册 18
2.2 Interface Builder 20
2.3 Dashcode 20
2.4 iPhone模拟器 21
2.5 其他工具 22
2.5.1 FileMerge 22
2.5.2 Icon Composer 23
2.5.3 Property List Editor 23
2.6 Mac或iPhone应用程序开发的流程 23
2.6.1 准备应用程序用的材料 24
2.6.2 建立步骤 25
2.6.3 gcc 26
第3章 应用程序与框架 27
3.1 关于应用程序 27
3.1.1 应用程序的种类 28
3.1.2 关于iPhone应用程序 29
3.2 框架 29
3.2.1 简单的“Hello World”程序 29
3.2.2 框架的出现 30
3.2.3 编程语言与框架的关系 30
3.3 Mac OS X以及iPhone SDK中的框架 31
3.3.1 框架的安装目录 31
3.3.2 Cocoa与Carbon 32
3.3.3 应用程序中使用的框架 32
3.4 Cocoa与Carbon的发展轨迹 34
3.4.1 Cocoa是面向对象型的框架,所以挺难掌握 35
3.4.2 Carbon是用C开发的,懂语言的人应该用Carbon 35
3.4.3 Carbon将来会消失 35
3.4.4 Carbon应用程序使用Cocoa进行改写后速度会提高 35
3.4.5 如果使用Windows版的Cocoa进行开发,在Windows上也能运行Cocoa应用程序 36
第4章 Cocoa与Objective-C 37
4.1 框架的使用 37
4.1.1 关于API 37
4.1.2 API与编程语言的关系 39
4.2 Objective-C的发展史 39
4.3 用于其他语言中的Cocoa API 41
4.3.1 通过桥调用Cocoa 41
4.3.2 是否应提倡在Objective-C以外的语言中调用CocoaAPI的开发方式 42
4.4 解答与Objective-C相关的几个疑问 43
4.4.1 是否需要先掌握C语言,以及Smalltalk呢 43
4.4.2 Objective-C这样冷门的语言不好学吧 43
4.4.3 Objective-C也能广泛运用在Windows或Linux平台上吗 44
4.4.4 Objective-C将来会消失吗 44
第5章 Cocoa面向对象编程的基本概念 45
5.1 面向对象的5个基本术语 45
5.1.1 类 46
5.1.2 实例 46
5.1.3 实例变量 47
5.1.4 方法 48
5.1.5 继承 48
5.1.6 相互关系 49
5.1.7 对象 50
5.2 在Cocoa实例中理解基本术语 50
5.2.1 通过按钮配置理解基本术语 50
5.2.2 文本输入框的继承关系 51
第6章 Hello World应用程序 53
6.1 关于Cocoa版的Hello World程序 53
6.2 启动Xcode创建工程 54
6.3 创建类 56
6.3.1 创建类文件 56
6.3.2 追加代码 56
6.4 启动Interface Builde设计用户界面 58
6.4.1 xib文件 58
6.4.2 Interface Builder窗口 59
6.4.3 设计Hello World的用户界面 61
6.5 类的实例化 62
6.6 连接插座与动作 64
6.7 完成AppController的代码编写 67
6.8 建立与运行 67
6.9 开发步骤再回顾 69
第7章 MVC构架 70
7.1 Hello World应用程序开发流程中包含的信息 70
7.2 什么是MVC构架 70
7.2.1 视图层 71
7.2.2 模型层 71
7.2.3 控制层 72
7.3 使用MVC构架的实例 72
7.3.1 iTunes的模型 72
7.3.2 iTunes的视图 73
7.3.3 iTunes的控制 74
7.4 使用MVC构架的Cocoa应用程序开发特点 75
7.4.1 视图组件由Cocoa提供 75
7.4.2 保持视图与模型间的相互独立 75
7.4.3 应用程序特有的功能由控制提供 75
7.4.4 只用创建模型以及控制的类 76
第8章 插座与动作 77
8.1 视图与控制间的信息交换 77
8.2 插座与动作 78
8.2.1 什么是插座 78
8.2.2 什么是动作 78
8.3 插座以及动作的连接 79
8.3.1 插座与动作的追加 79
8.3.2 插座的连接 80
8.3.3 动作的连接 81
8.3.4 连接确认 82
第9章 C语言语法基础 85
9.1 C语言概论 85
9.1.1 C语言的发展过程 85
9.1.2 C语言的特点 85
9.1.3 C源程序的结构特点 86
9.1.4 C源程序的构成规则 89
9.1.5 C语言的字符集 89
9.1.6 C语言词汇 90
9.2 数据类型 92
9.2.1 基本数据类型 92
9.2.2 基本运算符和表达式 98
9.2.3 关系运算符和表达式 101
9.2.4 逻辑运算符和表达式 102
9.3 数组 103
9.3.1 一维数组 103
9.3.2 二维数组 104
9.3.3 字符数组 104
9.4 指针 104
9.4.1 指针的基本概念 105
9.4.2 指针变量的类型声明 105
9.4.3 指针变量的赋值 106
9.4.4 使用字符串指针变量与字符数组的区别 106
9.5 C语言的输出语句printf()函数 107
9.5.1 printf()函数调用的一般形式 107
9.5.2 格式字符串 107
9.5.3 输出的实例 109
9.6 控制语句 110
9.6.1 if语句 110
9.6.2 switch语句 113
9.6.3 while语句 115
9.6.4 do…while语句 116
9.6.5 for语句 117
9.7 函数 119
9.7.1 函数的语法 120
9.7.2 函数的声明与实体 121
9.7.3 可变参数 122
9.7.4 标准函数库 122
9.8 结构 123
9.8.1 结构的定义 123
9.8.2 结构类型变量的声明 124
9.8.3 结构变量的取值与赋值 125
9.9 在Xcode中创建学习C语言用的工程 125
第10章 Objective-C的语法 129
10.1 Objective-C的编程概论 129
10.1.1 Objective-C与C语言 129
10.1.2 Objective-C程序 129
10.1.3 类的声明与实体 130
10.1.4 创建Objective-C的测试工程 130
10.2 类的声明 135
10.2.1 导入声明文件 135
10.2.2 类的声明 136
10.2.3 实例变量的声明 137
10.2.4 实例方法的声明 137
10.3 编写类的实体 142
10.3.1 编写类的实体 142
10.3.2 编写方法代码 143
10.3.3 关于方法的声明 144
10.4 对象专用变量类型 144
10.4.1 实例对象专用的变量类型 144
10.4.2 id类型 145
10.4.3 nil类型 145
10.4.4 在条件表达式中使用对象变量 145
10.5 方法调用 146
10.5.1 实例方法的调用 146
10.5.2 类方法的调用 147
10.5.3 对象为nil的情况下 148
10.6 命名规则 148
10.6.1 类的命名规则 148
10.6.2 实例变量的命名规则 149
10.6.3 方法的命名规则 149
10.7 重新解析Cocoa的Hello World程序 150
10.7.1 AppController.h 150
10.7.2 AppController.m 151
第11章 内存管理 153
11.1 内存分配与释放 153
11.2 与内存相关的问题 154
11.2.1 内存释放的时机 154
11.2.2 内存泄漏 155
11.3 使用垃圾收集进行内存管理 155
11.3.1 垃圾回收 155
11.3.2 Objective-C与垃圾回收 157
11.3.3 垃圾回收功能有效化 158
11.3.4 垃圾回收编程的规则 159
11.4 由参照统计实现的内存管理 159
11.4.1 参照统计的基本概念 159
11.4.2 retain和release方法 160
11.4.3 对象保持到释放的流程 160
11.5 类的实例化 162
11.5.1 类的实例化与初始化 162
11.5.2 自动释放 163
11.5.3 创建实例的方法 164
11.5.4 实例的释放 165
11.6 内存管理的规则 166
11.6.1 临时对象 166
11.6.2 内存管理经验总结 168
第12章 字符串 169
12.1 字符串专用类 169
12.2 NSString与NSMutableString 170
12.3 字符编码 170
12.3.1 什么是字符编码 170
12.3.2 NSString的字符代码为Unicode 171
12.3.3 NSStringEncoding 171
12.4 字符串的生成 172
12.4.1 使用@″″的形式创建新字符串 172
12.4.2 创建中文字符串 173
12.4.3 使用格式创建字符串 174
12.5 NSRange 176
12.6 字符串处理 177
12.6.1 计算字符串的长度 177
12.6.2 字符串的连接、插入和删除 178
12.6.3 字符串的比较 181
12.6.4 字符串的检索 183
12.6.5 抽取部分字符串 184
12.7 读/写文本文件 186
12.7.1 读取文本文件 186
12.7.2 输出文本文件 187
第13章 集合 189
13.1 数组 189
13.1.1 NSArray与NSMutableArray 189
13.1.2 数组的创建 190
13.1.3 数组的长度 191
13.1.4 通过索引取得对象 192
13.1.5 使用NSEnumerator取得对象 193
13.1.6 使用高速枚举法取得对象 196
13.1.7 对象的追加与删除 197
13.2 字典 199
13.2.1 什么是字典类型 199
13.2.2 NSDictionary与NSMutableDictionary 200
13.2.3 NSDictionary的创建 200
13.2.4 键与值的取得 202
13.2.5 键与值的追加 203
13.3 包装类 205
13.3.1 什么是包装类 205
13.3.2 NSNumber 205
13.4 对象的等价与同值 208
13.4.1 拥有相同值的对象 208
13.4.2 等价与同值的判定 208
13.4.3 在集合类中的应用 210
13.5 集合类与参照统计 210
13.5.1 NSArray与参照统计 210
13.5.2 NSDictionary与参照统计 212
第14章 XML应用 213
14.1 XML概要 213
14.1.1 什么是XML 213
14.1.2 一种常用的XML实例——RSS 213
14.2 XML的解析 215
14.2.1 解析及解析器 215
14.2.2 XML解析器的种类 215
14.2.3 树结构 216
14.3 Cocoa中的XML解析器 218
14.3.1 NSXMLDocument,NSXMLNode和NSXMLElement 218
14.3.2 XML文档的解析器 219
14.3.3 Xpath 221
14.3.4 节点信息 222
14.3.5 节点的父子关系 223
14.3.6 属性值的取得 225
第15章 表格视图 227
15.1 表格视图 227
15.1.1 NSTableView与NSTableColumn 227
15.1.2 表格的构造 229
15.2 数据资源 229
15.2.1 在表格中使用数据资源 229
15.2.2 数据资源的方法 230
15.2.3 NSTableView的方法 231
15.3 实例 231
15.3.1 数据资源的设置 238
15.3.2 numberOfRowsInTableView: 238
15.3.3 tableView:objectValueForTableColumn:row: 239
15.3.4 单击Read按钮的处理代码 242
第16章 UIKit框架简介及如何创建iPhone表格视图 245
16.1 UIKit概要 246
16.1.1 UIKit框架的类一览表 246
16.1.2 UIKit框架与AppKit框架的区别 249
16.2 创建测试UIKit类的试验工程 250
16.2.1 创建第一个iPhone应用程序——Hello World工程 251
16.2.2 修改Hello World工程使之成为不使用xib文件的实验工程 256
16.3 创建最简单的表格 261
16.3.1 创建表 262
16.3.2 追加选择单元时运行的动作 265
16.4 iPhone表格视图的相关类参考 265
16.4.1 UITableView类 266
16.4.2 UITableViewCell类 272
16.4.3 UITableViewController类 279
16.4.4 UITableViewDataSource协议类 280
16.4.5 UITableViewDelegate协议类 284
第17章 常见的错误与警告 287
17.1 什么是错误与警告 287
17.2 Xcode中的错误与警告 287
17.2.1 错误与警告的显示方式 288
17.2.2 建立结果窗口 288
17.2.3 代码窗口中的显示 289
17.3 经常会出现的错误信息 290
17.3.1 'XXX'undeclared(first use in this function) 290
17.3.2 parse error before'XXX'token 291
17.3.3 invalid preprocessing directive#XXX 291
17.3.4 No Such file or directory 292
17.3.5 Undefined symbols 292
17.4 经常会出现的警告信息 293
17.4.1 'XXX'may not respond to'YYY' 293
17.4.2 unused variable'XXX' 294
17.4.3 local declaration of‘XXX’hides instance variable 295
17.4.4 incomplete implementation ofclass'XXX' 296
17.4.5 control reaches end of non-void function 297
17.4.6 passing argument n of'XXX'assignment from distinct Objective-C type 298
第18章 调试方法 299
18.1 缺陷与调试 299
18.1.1 什么是缺陷与调试 299
18.1.2 描述缺陷 300
18.1.3 缺陷的重现 300
18.2 NSLog 301
18.2.1 使用NSLog输出调试信息 301
18.2.2 NSLog的格式 302
18.3 调试工具 304
18.3.1 什么是调试工具 304
18.3.2 调试构建配置 305
18.3.3 断点与调试模式的启动 305
18.3.4 调试界面 306
18.3.5 调试的分步执行 308
18.4 例外 309
18.4.1 什么是例外 309
18.4.2 捕捉例外 309
18.4.3 发生例外时停止运行 312
18.4.4 避免使用太多的例外 313
第19章 应用程序的后期制作 314
19.1 应用程序图标 314
19.1.1 制作图标的图片 315
19.1.2 图标格式文件的制作 316
19.1.3 向工程中追加图片文件 317
19.2 应用程序的设置 317
19.2.1 什么是目标 317
19.2.2 与目标相关的应用程序设置 318
19.2.3 Info.plist 321
19.3 本地化 322
19.3.1 什么是本地化 322
19.3.2 用户界面的本地化 323
19.3.3 应用程序名称的本地化 326
19.3.4 本地化的测试 328
19.4 构建配置 329
19.4.1 什么是构建配置 329
19.4.2 将构建配置设为Release 329
19.5 完成的应用程序 330
附录A 加入iPhone Developer Program 331
索引 337