本书结合理论知识和实例程序,全面而系统地介绍了Objective-C 编程的相关内容,包括类和继承、对象的类型和动态绑定、基于引用计数的内存管理、垃圾回收、属性声明、类NSObject 和运行时系统、Foundation 框架中常用的类、范畴、抽象类与类簇、对象的复制及存储、块对象、消息发送模式、图像视图、异常和错误、并行编程、键值编码等。
本书适合iOS 应用和Mac OS X 开发初学者系统入门、有经验的开发者深入理解语言本质,也适合开发团队负责人、项目负责人作为综合性的Objective-C 参考书阅读。
第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
《错觉》内容简介:在人工智能异常火热的今天,很多人认为我们生活在一个不可思议的历史时期,人工智能和大数据可能比工业革命更能
《资治通鉴启示录(全二册)》内容简介:《资治通鉴》“网罗宏富,体大思精”,毛泽东生前读了十七遍,赞叹这是一部难得的好书。张
《2017年MBA、MPA、MPAcc管理类联考英语历年真题详解》内容简介:本书对MBA联考英语历年真题给予了系统分析和解答,并总结和归纳了
《人间草木(插图本)》内容简介:汪曾祺的散文创作大致可分为:记人事,写风景,谈文化,述掌故,兼及草木鱼虫、瓜果食物等。因为
《实用语义网RDFS与OWL高效建模(英文版)》是语义网的入门教程,详细讲述语义网的核心内容的语言,包括语义网的概念、语义建模等。
《30天学会钢琴弹奏》内容简介:想随心所欲地弹奏出一首流畅的钢琴曲,却苦于不识五线谱?没有时间去上钢琴班,自学又太费时间?《
互联网时代:全球第一部全面、系统、深入、客观解析互联网的纪录片 本书特色 全球**次全面、系统、深入、客观解析互联网中央电视台热播纪录片《互联网时代》同名书免费...
本书由微软MVP编写,是ASP.NET领域一本重要的技巧类图书,提供了很多鲜为人知的优秀解决方案、未正式发布的特性、提示和技巧,可
比尔•盖茨曾说过:“21世纪要么电子商务,要么无商可务。”在这个一切皆电子商务的时代,人类数千年来的商业行为被颠覆,人们的购
乍一看这本书的名字,ExpertoneononeJ2EEdevelopmentwithoutEJB并没有给人带来太冲击。毕竟关于J2EE的书太多了,而witho...
AstheindustrystandardmethodforenrichingthepresentationofHTML-basedwebpages,Casca...
这是一本内容翔实的色彩设计手册,通过讲解色相或搭配图例的基础知识,以及都市中的形象色彩设计,传递给读者一种色彩搭配感觉,
《我们为什么需要历史唯物主义》内容简介:在人类的思想长河中,历史唯物主义已经走过了100多年的历程。100多年来,历史唯物主义是
分布式算法20多年来一直是倍受关注的主流方向。本书第二版不仅给出了算法的最新进展,还深入探讨了与之相关的理论知识。这本教材
本书开创性地深入揭示了重构与模式这两种软件开发关键技术之间的联系,说明了通过重构实现模式改善既有的设计,往往优于在新的设
《Spring Cloud微服务:入门、实战与进阶》内容简介:本书主打的是与微服务相关的实战体系。第一部分是准备篇,可以帮助各位读者了
《中国舞蹈通史:宋 辽 西夏 金 元卷》内容简介:中国舞蹈史学研究的意义和任务是什么呢?无非是为了“考古以证今”,“以史明鉴”
ThisbookconstitutestherefereedproceedingsoftheSecondInternationalWorkshoponHuman...
社交媒体网络安全理论与技术 本书特色 张志勇、赵长伟、王剑等著的这本《社交媒体网络安全理论与技术》试图从信息技术和社会空间管理的多学科交叉视角,对媒体社交网络安...
AndyOramAndyOram是OReillyMedia的编辑。他从1992年开始就在这家公司工作,Andy目前主要关注自由软件和开源技术。他在OReilly...