第一篇 基础篇 2
第1章 第一个Objective-C程序 2
1.1 Objective-C开发概述 2
1.1.1 Objective-C 的发展史 2
1.1.2 Objective-C的特点 3
1.2 构建开发环境 4
1.2.1 Objective-C开发环境的安装条件 4
1.2.2 VirtualBox下载和安装 5
1.2.3 虚拟机的建立 7
1.2.4 设置虚拟机 10
1.2.5 安装系统 11
1.2.6 进入界面 11
1.2.7 下载和安装Xcode 16
1.3 “Hello World!”程序 20
1.3.1 创建Hello Objective-C 项目 20
1.3.2 编译、链接及运行 22
1.4 Objective-C代码认识 24
1.4.1 查看源文件 24
1.4.2 Objective-C程序的结构 25
1.4.3 注释 25
1.4.4 标识符 26
1.5 小结 28
1.6 习题 28
第2章 数据类型 30
2.1 数 30
2.1.1 二进制数 30
2.1.2 十进制数 31
2.1.3 八进制数 32
2.1.4 十六进制数 33
2.1.5 各进制之间的转换 34
2.2 数据类型 34
2.2.1 整数类型 34
2.2.2 实型数据 36
2.2.3 字符型 37
2.2.4 数据类型的输出 40
2.2.5 Objective-C特有的数据类型 40
2.3 变量和常量 40
2.3.1 变量 41
2.3.2 常量 43
2.4 小结 45
2.5 习题 45
第3章 语句 48
3.1 语句的构成 48
3.2 运算符及表达式 49
3.2.1 算术运算符及表达式 49
3.2.2 自增自减运算符 51
3.2.3 位运算符 52
3.2.4 赋值运算符及表达式 55
3.2.5 关系运算符及表达式 59
3.2.6 条件运算符 60
3.2.7 布尔逻辑运算符及表达式 62
3.2.8 逗号运算符及表达式 64
3.2.9 求字节数运算符 65
3.2.10 特殊的运算符 66
3.2.11 运算符的优先级 67
3.3 类型转换 69
3.3.1 自动转换 69
3.3.2 强制类型转换 71
3.4 语句块 72
3.4.1 语句块的结构 72
3.4.2 作用域 73
3.5 小结 74
3.6 习题 74
第4章 程序控制结构 77
4.1 顺序结构 77
4.2 选择结构 78
4.2.1 条件语句的组成 78
4.2.2 if语句 79
4.2.3 if...else语句 80
4.2.4 if...else...if语句 82
4.2.5 三种if语句的注意事项 84
4.2.6 if语句的嵌套 86
4.2.7 switch语句 87
4.3 循环结构 90
4.3.1 while语句 91
4.3.2 for语句 92
4.3.3 do...while语句 97
4.3.4 三种循环语句的比较 98
4.4 转折语句 99
4.4.1 break语句 99
4.4.2 continue 101
4.4.3 break和continue的比较 101
4.4.4 return语句 102
4.5 小结 102
4.6 习题 103
第5章 函数 105
5.1 函数简介 105
5.2 函数的使用 107
5.2.1 函数的声明 107
5.2.2 函数的定义和调用 107
5.2.3 函数使用中的问题 109
5.2.4 空函数 110
5.3 函数的参数 111
5.3.1 参数 111
5.3.2 有参函数的定义和调用 112
5.3.3 参数的注意事项 113
5.3.4 函数的传递方式 114
5.4 函数的返回值 115
5.4.1 返回某一数据类型的值 115
5.4.2 无返回值 117
5.5 函数的嵌套和递归 117
5.5.1 函数的嵌套 117
5.5.2 函数的递归 119
5.6 小结 120
5.7 习题 120
第二篇 面向对象篇 124
第6章 面向对象编程 124
6.1 类和对象 124
6.1.1 类的声明和定义 124
6.1.2 实例化对象 126
6.2 实例变量 130
6.2.1 实例变量的定义 130
6.2.2 实例变量的使用 130
6.2.3 实例变量、全局变量和局部变量的区别 131
6.2.4 变量的存储类别 132
6.3 方法 135
6.3.1 方法的声明 135
6.3.2 方法的实现 136
6.3.3 对象方法的使用 136
6.3.4 类方法的使用 138
6.3.5 方法的参数 139
6.4 属性 142
6.4.1 属性的声明和定义 142
6.4.2 带参属性 144
6.4.3 带参属性——setter/getter方法(assign/retain/copy) 144
6.4.4 带参属性——读写属性 148
6.4.5 带参属性——原子修饰 149
6.5 小结 150
6.6 习题 150
第7章 深入面向对象的编程 154
7.1 继承 154
7.1.1 继承的实现 154
7.1.2 实例变量的继承 155
7.1.3 方法的继承 158
7.2 访问限定符 159
7.2.1 @public 159
7.2.2 @protected 161
7.2.3 @private 161
7.2.4 访问限定符的区别 162
7.3 方法重写 163
7.3.1 方法重写的形式 163
7.3.2 super 164
7.4 方法重载 165
7.5 多层继承 166
7.6 多态 169
7.6.1 多态的形式 169
7.6.2 方法的重写实现多态 170
7.6.3 方法的重载实现多态 171
7.7 动态类型和动态绑定 172
7.7.1 动态类型id 172
7.7.2 动态绑定 173
7.8 小结 174
7.9 习题 174
第8章 分类和协议 180
8.1 分类 180
8.1.1 分类的声明 180
8.1.2 分类的定义 180
8.1.3 分类的使用 181
8.1.4 分类的创建 181
8.1.5 分类使用的注意点 183
8.2 协议 185
8.2.1 协议的定义 185
8.2.2 协议的创建 186
8.2.3 协议在类中的声明 187
8.2.4 所用协议声明方法 187
8.2.5 关键字 188
8.2.6 多个协议的使用 192
8.2.7 在协议中使用协议 193
8.2.8 判断协议实现的方法 194
8.2.9 协议的分类 195
8.3 小结 196
8.4 习题 196
第三篇 技术篇 200
第9章 内存管理 200
9.1 内存管理的基础 200
9.1.1 申请内存(alloc) 200
9.1.2 释放内存(dealloc) 201
9.2 引用计数 204
9.2.1 引用计数和字符串 205
9.2.2 引用计数和实例变量 206
9.3 自动释放池 207
9.3.1 自动释放池 207
9.3.2 建立多个自动释放池 209
9.3.3 引用计数和自动释放池 210
9.4 内存管理规则及内存泄漏 211
9.4.1 内存管理规则 211
9.4.2 存泄漏 213
9.5 垃圾回收 213
9.6 小结 214
9.7 习题 214
第10章 Foundation框架的基本对象 217
10.1 数字对象 217
10.1.1 数字对象的介绍 217
10.1.2 数字对象的使用 218
10.2 字符串对象 224
10.2.1 字符串和字符的区别 224
10.2.2 不可修改的字符串 225
10.2.3 可修改的字符串 232
10.3 数组对象 235
10.3.1 数组的定义 235
10.3.2 数组的声明 235
10.3.3 数组的引用 237
10.3.4 二维数组的声明和定义 238
10.3.5 二维数组初始化的方法 239
10.3.6 二维数组的引用 240
10.3.7 字符数组的含义 241
10.3.8 字符数组初始化 241
10.3.9 字符数组的引用 241
10.3.10 不可修改的数组 242
10.3.11 可修改的数组 246
10.4 字典对象 251
10.4.1 不可修改的字典 251
10.4.2 可修改的字典 253
10.5 集合对象 256
10.5.1 不可修改的集合 257
10.5.2 可修改的集合 259
10.6 小结 263
10.7 习题 263
第11章 文件和目录处理 267
11.1 文件的操作 267
11.1.1 创建文件 267
11.1.2 文件的使用 268
11.1.3 对文件数据的操作 274
11.1.4 文件的读写 278
11.2 目录的操作 286
11.2.1 目录的基本操作方法 286
11.2.2 目录的显示 289
11.2.3 临时目录 292
11.2.4 路径 293
11.3 小结 294
11.4 习题 294
第12章 编译预处理 296
12.1 宏定义 296
12.1.1 不带参宏定义 296
12.1.2 带参宏 297
12.1.3 使用宏的注意点 298
12.1.4 宏的取消 299
12.2 文件包含 301
12.3 条件编译 304
12.3.1 #ifdef 304
12.3.2 #ifndef 305
12.3.3 #if 307
12.3.4 编译预处理总结 307
12.4 小结 308
12.5 习题 308
第13章 进程和线程 312
13.1 进程 312
13.1.1 创建进程 312
13.1.2 进程的使用 313
13.1.3 进程方法总结 315
13.2 线程 315
13.2.1 使用NSThread创建线程 316
13.2.2 启动线程 316
13.2.3 访问主线程 318
13.3 互斥锁 318
13.3.1 NSLock 319
13.3.2 @synchronized 320
13.4 进程和线程的区别 321
13.5 小结 322
13.6 习题 322
第14章 归档 324
14.1 XML属性列表 324
14.1.1 使用XML进行数据保存 324
14.1.2 使用XML进行数据读取 326
14.2 NSKeyedArchiver 329
14.2.1 NSKeyedArchive 的数据保存 330
14.2.2 NSKeyedArchive 的数据读取 331
14.3 编码和解码方法 331
14.3.1 直接进行归档 332
14.3.2 编码方法 333
14.3.3 解码方法 333
14.4 保存多个对象到一个文件 335
14.5 使用归档程序复制对象 337
14.6 小结 337
14.7 习题 338
第15章 错误处理 341
15.1 错误的分类 341
15.2 使用返回值 342
15.3 使用异常处理 342
15.3.1 异常处理的使用 343
15.3.2 捕获不同类型的异常 345
15.3.3 使用异常的注意点 346
15.3.4 抛出异常 348
15.4 使用NSError 349
15.5 小结 350
15.6 习题 351
第16章 时间日期处理 352
16.1 NSDate 352
16.1.1 创建NSDate 352
16.1.2 获取当前的日期 353
16.1.3 获取昨天的日期 353
16.1.4 日期的比较 355
16.1.5 两个日期的时间差 358
16.1.6 时间间隔 358
16.2 使用NSCalendar 359
16.2.1 创建一个给定日期的NSDate对象 359
16.2.2 日期在不同日历间的转换 361
16.2.3 获取日期总的年月日 361
16.3 字符串和日期的相互转化 362
16.3.1 将日期转化为字符串 362
16.3.2 将字符串转化为日期 363
16.4 时区 365
16.5 小结 366
16.6 习题 366
第四篇 iPhone开发入门篇 370
第17章 iPhone入门 370
17.1 iPhone简介 370
17.1.1 iPhone的发展 370
17.1.2 编写iPhone应用程序和其他程序的不同 371
17.2 第一个“Hello World!”程序 371
17.2.1 创建Hello World项目 371
17.2.2 iPhone Simulator的简介 371
17.2.3 使用Interface Builder 373
17.2.4 编写第一个“Hello World!”程序 376
17.3 小结 378