第1章 面向对象的编程1
1.1 对象的概念2
1.1.1 面向功能的软件设计的局限性2
1.1.2 面向对象的模块化2
1.1.3 消息传递3
1.1.4 模块的抽象化4
1.1.5 对象的属性5
专栏 面向对象的方方面面5
1.1.6 类6
专栏 Cocoa和Objective-C的历史8
1.2 模块和对象8
1.2.1 软件模块8
1.2.2 高独立性的模块9
1.2.3 模块的信息隐蔽9
1.2.4 类的定义和接口10
1.2.5 消息发送的实现10
专栏 C语言的新标准11
第2章 Objective-C程序设计 13
2.1 对象和消息14
2.1.1 消息表达式14
2.1.2 消息选择器15
2.1.3 实例变量的生成和初始化16
2.2 类的定义17
2.2.1 类的接口声明17
专栏 各种各样的布尔类型18
专栏 不指定方法的返回值18
2.2.2 类的实现19
2.2.3 一个遥控器的例子19
2.3 编译21
2.3.1 简单的编译方法21
2.3.2 多文件编译23
2.4 程序的书写风格24
2.4.1 混合编程24
2.4.2 C语言函数的使用方法25
2.4.3 静态变量的定义26
2.4.4 头文件的引入26
专栏 参考文档和SDK27
专栏 Xcode的安装28
第3章 类和继承 29
3.1 继承的概念30
3.1.1 父类和子类30
3.1.2 类的层次结构31
3.2 利用继承定义新类32
3.2.1 继承的定义32
3.2.2 类定义和头文件33
3.2.3 继承和方法调用34
3.2.4 调用父类的方法34
3.2.5 初始化方法的定义35
3.3 使用继承的程序示例36
3.3.1 追加新方法的例子36
3.3.2 方法重写的例子37
3.4 继承和方法调用38
3.4.1 使用self调用方法38
3.4.2 使用super调用方法39
3.4.3 测试程序40
3.5 方法定义时的注意事项41
3.5.1 局部方法41
3.5.2 指定初始化方法42
专栏 Objective-C与开源软件44
第4章 对象的类型和动态绑定 45
4.1 动态绑定46
4.1.1 什么是动态绑定46
4.1.2 多态47
4.2 作为类型的类48
4.2.1 把类作为一种类型48
4.2.2 空指针nil49
专栏 关系表达式50
4.2.3 静态类型检查51
4.2.4 静态类型检查的总结53
4.3 编程中的类型定义54
4.3.1 签名不一致时的情况54
专栏 重载55
4.3.2 类的前置声明56
4.3.3 强制类型转换的使用示例57
4.4 实例变量的数据封装58
4.4.1 实例变量的访问权限58
4.4.2 访问器60
4.4.3 实例变量的可见性61
4.4.4 在实现部分中定义实例变量62
4.5 类对象63
4.5.1 什么是类对象63
4.5.2 类对象的类型64
4.5.3 类方法的定义65
4.5.4 类变量65
4.5.5 类对象的初始化66
4.5.6 初始化方法的返回值68
第5章 基于引用计数的内存管理 69
5.1 动态内存管理70
5.1.1 内存管理的必要性70
5.1.2 引用计数、自动引用计数和自动垃圾回收70
5.2 手动引用计数内存管理71
5.2.1 引用计数71
5.2.2 测试引用计数的例子73
5.2.3 释放对象的方法74
5.2.4 访问方法和对象所有权75
专栏 静态对象75
5.2.5 自动释放76
5.2.6 使用自动释放池时需要注意的地方77
5.2.7 临时对象的生成77
5.2.8 运行回路和自动释放池78
5.2.9 常量对象78
专栏 常量修饰符const79
5.3 分数计算器的例子80
5.3.1 分数类Faction80
5.3.2 保存计算结果的FracRegister类83
5.3.3 主函数和执行示例85
5.4 ARC概要88
5.4.1 什么是ARC88
5.4.2 禁止调用引用计数的相关函数89
5.4.3 管理自动释放池的新语法90
5.4.4 变量的初始值90
5.4.5 方法族90
5.4.6 方法dealloc的定义92
5.4.7 使用ARC的程序的编译93
5.4.8 ARC的基本注意事项94
5.4.9 使用ARC重构分数计算器94
5.5 循环引用和弱引用95
5.5.1 循环引用95
5.5.2 所有权和对象间的关系96
5.5.3 弱引用97
5.5.4 自动nil化的弱引用98
5.5.5 对象之间引用关系的基本原则99
5.6 ARC编程时其他一些注意事项100
5.6.1 可以像通常的指针一样使用的对象100
5.6.2 setter方法的注意事项101
5.6.3 通过函数的参数返回结果对象102
5.6.4 C语言数组保存Objective-C对象103
5.6.5 ARC对结构体的一些限制105
5.6.6 提示编译器进行特别处理106
第6章 垃圾回收 107
6.1 垃圾回收的概要108
6.1.1 查找不再使用的对象108
6.1.2 编程时的注意事项109
6.1.3 垃圾收集器110
6.1.4 finalize方法的定义111
6.1.5 编译时的设定112
6.1.6 引用计数管理方式中方法的处理113
6.1.7 使用垃圾回收编程小结114
6.2 垃圾回收的详细功能114
6.2.1 分代垃圾回收114
6.2.2 弱引用115
6.2.3 自动nil化115
6.2.4 通过垃圾回收回收动态分配的内存116
6.2.5 _ _strong修饰符的使用方法117
6.2.6 NSGarbageCollector类117
6.2.7 实时API118
6.3 内存管理方式的比较119
6.3.1 引用计数和垃圾回收119
6.3.2 更改内存管理方式120
6.3.3 各种内存管理方式的比较120
第7章 属性声明 123
7.1 属性是什么124
7.1.1 使用属性编程124
7.1.2 属性的概念125
专栏 内省125
7.2 属性的声明和功能126
7.2.1 显式声明属性126
7.2.2 属性的实现127
7.2.3 @synthesize和实例变量129
7.2.4 通过@synthesize生成实例变量130
7.2.5 给属性指定选项131
7.2.6 赋值时的选项132
7.2.7 原子性134
7.2.8 属性声明和继承135
7.2.9 方法族和属性的关系135
7.3 通过点操作符访问属性136
7.3.1 点操作符的使用方法136
7.3.2 复杂的点操作符的使用方法137
7.3.3 何时使用点操作符139
第8章 类NSObject和运行时系统 141
8.1 类NSObject142
8.1.1 根类的作用142
8.1.2 类和实例142
8.1.3 实例对象的生成和释放143
8.1.4 初始化144
8.1.5 对象的比较144
8.1.6 对象的内容描述145
8.2 消息发送机制145
8.2.1 选择器和SEL类型145
8.2.2 消息搜索146
8.2.3 以函数的形式来调用方法147
专栏 函数指针148
8.2.4 对self进行赋值149
8.2.5 发送消息的速度149
8.2.6 类对象和根类152
8.2.7 Target-action paradigm153
8.2.8 Xcode中的动作方法和Outlet的写法155
8.3 Objective-C和Cocoa环境156
8.3.1 cocoa环境和Mac OS X156
8.3.2 Cocoa Touch和iOS156
8.3.3 框架157
8.3.4 框架的构成和头文件157
8.4 全新的运行时系统159
8.4.1 对64位的对应和现代运行时系统159
8.4.2 数据模型159
8.4.3 64位模型和整数类型159
8.4.4 Core Graphics的浮点数类型160
8.4.5 健壮实例变量161
专栏 条件编译162
第9章 Foundation框架中常用的类 163
9.1 对象的可变性164
9.1.1 可变对象和不可变对象164
9.1.2 可变对象的生成165
9.2 字符串类NSString166
9.2.1 常量字符串166
9.2.2 NSString167
9.2.3 NSMutableString174
9.3 NSData176
9.3.1 NSData176
9.3.2 NSMutableData178
9.4 数组类179
9.4.1 NSArray179
9.4.2 NSMutableArray183
9.4.3 数组对象的所有权184
9.4.4 快速枚举185
9.4.5 枚举器NSEnumerator186
9.4.6 快速枚举和枚举器187
9.4.7 集合类188
9.5 词典类189
9.5.1 NSDictionary191
9.5.2 NSMutableDicitionary193
9.6 包裹类194
9.6.1 NSNumber194
9.6.2 NSValue196
9.6.3 类型编码和@encode()196
9.6.4 NSNull197
9.7 NSURL198
9.7.1 关于URL198
9.7.2 NSURL的概要199
9.7.3 使用NSURL来访问资源201
第10章 范畴 203
10.1 范畴204
10.1.1 范畴204
10.1.2 范畴和文件的组织205
10.1.3 作为子模块的范畴206
10.1.4 方法的前向声明207
10.1.5 私有方法208
10.1.6 类扩展209
10.1.7 范畴和属性声明210
10.2 给现有类追加范畴211
10.2.1 追加新的方法211
10.2.2 追加方法的例子212
专栏 可变参数的方法的定义213
10.2.3 覆盖已有的方法214
10.3 关联引用215
10.3.1 关联引用的概念215
10.3.2 添加和检索关联215
10.3.3 对象的存储方法216
10.3.4 断开关联217
10.3.5 利用范畴的例子217
第11章 抽象类和类簇 221
11.1 抽象类222
11.1.1 什么是抽象类222
11.1.2 抽象类的例子223
11.2 类簇228
11.2.1 类簇的概念228
11.2.2 测试程序229
11.2.3 编程中的注意事项230
11.3 生成类簇的子类231
11.3.1 使用范畴231
11.3.2 基本方法的重定义231
11.3.3 生成字符串的子类233
第12章 协议235
12.1 协议的概念236
12.1.1 什么是协议236
12.1.2 对象的协议236
12.2 Objective-C中协议的声明238
12.2.1 协议的声明238
12.2.2 协议的采用239
12.2.3 协议的继承240
12.2.4 指定协议的类型声明240
12.2.5 协议的前置声明241
12.2.6 协议适用性检查241
12.2.7 必选功能和可选功能242
12.2.8 使用协议的程序示例242
专栏 类的多重继承245
12.3 非正式协议246
12.3.1 什么是非正式协议246
12.3.2 非正式协议的用途246
专栏 使用宏(macro)来区分系统版本的差异247
第13章 对象的复制及存储249
13.1 对象的复制250
13.1.1 浅复制和深复制250
13.1.2 区域251
13.1.3 复制方法的定义251
13.1.4 复制方法的例子252
13.1.5 实现可变复制254
13.2 归档255
13.2.1 对象的归档255
13.2.2 Foundation框架的归档功能255
13.2.3 归档方法的定义256
13.2.4 归档的方法定义257
13.2.5 归档和解档的初始化方法258
13.3 属性表259
13.3.1 属性表概况259
13.3.2 ASCII码格式属性表260
13.3.3 XML格式属性表261
13.3.4 属性表的变换和检查261
第14章 块对象 263
14.1 什么是块对象264
14.1.1 C编译器和GCD264
14.1.2 块对象的定义264
14.1.3 块对象和类型声明266
14.1.4 块对象中的变量行为267
14.1.5 排序函数和块对象269
14.2 块对象的构成271
14.2.1 块对象的实例和生命周期271
14.2.2 应该避免的编码模式273
14.2.3 块对象的复制273
14.2.4 指定特殊变量_ _block274
14.3 Objective-C和块对象276
14.3.1 方法定义和块对象276
14.3.2 作为Objective-C对象的块对象276
14.3.3 ARC和块对象277
14.3.4 对象内变量的行为277
14.3.5 集合类中添加的方法279
14.3.6 在窗体中使用块对象280
14.3.7 ARC中使用块对象时的注意事项281
第15章 消息发送模式 283
15.1 应用和运行回路284
15.1.1 运行回路284
15.1.2 定时器对象285
15.1.3 消息的延迟执行286
15.2 委托286
15.2.1 委托的概念286
15.2.2 Cocoa环境中的委托287
15.2.3 委托的设置和协议288
15.2.4 使用委托的程序289
15.3 通知289
15.3.1 通知和通知中心的概念289
15.3.2 通知对象290
15.3.3 通知中心291
15.3.4 通知队列293
专栏 通知名或异常名的定义294
15.4 反应链294
15.4.1 反应链概述294
15.4.2 应用中的反应链295
15.5 消息转送296
15.5.1 消息转送的构成296
15.5.2 消息转送需要的信息296
15.5.3 消息转送的定义297
15.5.4 禁止使用消息298
15.5.5 程序示例298
15.6 撤销构造300
15.6.1 撤销构造的概念300
15.6.2 在撤销管理器中记录操作301
第16章 应用的构造 303
16.1 应用束304
16.1.1 应用束的构造304
16.1.2 nib文件和各语言资源305
专栏 指定语言和地区305
16.1.3 信息文件的主要内容306
16.1.4 通过NSBundle访问资源308
16.1.5 iOS中资源的访问310
16.1.6 通用二进制311
16.2 加载nib文件312
16.2.1 nib文件实例化312
16.2.2 在Mac OS X中加载nib文件313
16.2.3 在iOS中加载nib文件313
16.2.4 nib文件内的包含循环314
16.2.5 nib文件内对象的初始化314
16.2.6 启动应用314
16.3 iOS的文件保存场所316
16.3.1 主要目录及功能316
16.3.2 获取目录路径317
16.4 用户默认317
16.4.1 保存设定值317
16.4.2 默认域318
16.4.3 查找用户默认的工具319
16.4.4 NSUserDefaults概要319
16.5 应用的本地化321
16.5.1 消息的本地化321
16.5.2 本地化指针322
专栏 本地化应用名323
16.5.3 本地化323
专栏 消息内的语序324
16.6 模块的动态加载324
16.6.1 可加载束325
16.6.2 使用可加载束的程序325
16.6.3 插件概述326
专栏 沙盒(App Sandbox)327
第17章 实例:简单图像视图 329
17.1 Application框架和Interface Builder330
17.2 程序概况330
17.2.1 对象间的关系330
17.2.2 通知331
17.2.3 撤销和重做332
17.2.4 可加载束和本地化332
17.2.5 用户默认332
17.3 编程介绍333
17.3.1 main函数和MyViewerCtrl类333
17.3.2 类WinCtr336
17.3.3 类MyInspector341
17.4 应用束的组织345
17.4.1 创建编译和设置文件345
17.4.2 程序运行例子346
17.4.3 GUI定义文件和程序347
专栏 Objective-C调试器的功能349
第18章 异常和错误 351
18.1 异常352
18.1.1 异常处理的概念352
18.1.2 Objective-C中的异常处理352
18.2 异常处理机制概述353
18.2.1 异常句柄和异常处理域353
18.2.2 异常表示类NSException353
18.2.3 异常处理机制的语法354
18.2.4 简单的异常处理的示例程序355
专栏 日志输出函数NSLog()356
18.3 异常的发生和传播 357
18.3.1 异常的传播357
18.3.2 自己触发异常357
18.3.3 用 @throw语法产生异常357
18.3.4 @catch 的特殊语法 358
18.3.5 异常传播和 @finally 358
18.3.6 异常处理程序的注意点359
18.4 断言360
18.4.1 断言是什么360
18.4.2 断言宏361
专栏 包含可变个数的参数的宏361
18.5 错误处理362
18.5.1 错误处理结构的目的362
18.5.2 表示错误的类 NSError的使用方法362
18.5.3 获取错误对象的信息364
18.5.4 生成自定义错误对象364
18.6 错误反应链366
18.6.1 错误反应链的结构366
18.6.2 错误对象的更改和恢复367
专栏 单元测试369
第 19章 并行编程 371
19.1 多线程372
19.1.1 线程的基本概念372
19.1.2 线程安全372
19.1.3 注意点373
19.1.4 使用 NSThread创建线程373
19.1.5 当前线程374
19.1.6 GUI应用和线程374
19.2 互斥375
19.2.1 需要互斥的例子375
19.2.2 锁376
19.2.3 死锁377
19.2.4 尝试获得锁378
19.2.5 条件锁378
19.2.6 NSRecursiveLock379
19.2.7 @synchronized379
19.3 操作对象和并行处理380
19.3.1 新的并行处理程序380
19.3.2 使用NSOperation的处理概述381
19.3.3 NSOperation和NSOperationQueue的简单用法382
19.3.4 等待至聚合任务终止383
19.3.5 使用操作对象的简单例子383
19.3.6 NSInvocationOperation的使用方法385
19.3.7 NSBlockOperation 的使用方法385
19.3.8 NSBlockOperation中添加多个块对象386
19.3.9 设置任务间的依赖386
19.3.10 任务的优先级设置388
19.3.11 设定最大并行任务数388
19.3.12 终止任务389
19.3.13 设置队列调度为中断状态389
19.4 并行处理的示例程序390
19.4.1 程序概要390
19.4.2 类BrowsingViewerCtrl390
19.4.3 类BrowsingWinCtrl392
19.4.4 类DrawOperation394
19.4.5 其他改变396
19.5 使用连接的通信397
19.5.1 连接398
19.5.2 代理398
19.5.3 方法的指针参数399
19.5.4 对象的副本传递400
19.5.5 异步通信401
19.5.6 设置协议401
19.5.7 运行回路的开始402
19.5.8 收发消息时的处理402
19.5.9 线程间连接404
19.5.10 进程间连接406
19.5.11 进程间连接的例子407
第20章 键值编码 411
20.1 键值编码概况412
20.1.1 什么是键值编码412
20.1.2 键值编码的基本处理412
20.2 访问属性414
20.2.1 键值编码的方法的行为414
20.2.2 属性值的自动转换415
20.2.3 字典对象和键值编码416
20.2.4 根据键路径进行访问416
20.2.5 一对一关系和一对多关系417
20.2.6 数组对象和键值编码419
20.3 一对多关系的访问420
20.3.1 带索引的访问器模式420
20.3.2 一对多关系的可变访问421
20.4 KVC标准422
20.4.1 验证属性值422
20.4.2 键值编码的准则423
20.5 键值观察424
20.5.1 键值观察的基础424
20.5.2 示例程序426
20.5.3 一对多关系的属性监视429
20.5.4 依赖键的登记429
20.6 Cocoa绑定概述430
20.6.1 目标-行为-模式的弱点430
20.6.2 什么是Cocoa绑定430
20.6.3 Cocoa绑定所需的方法431
20.6.4 例题:绘制二次函数图的软件432
20.6.5 自定义视图的方法定义434
评价“Objective-C编程全解(第3版)”