第一部分 全新功能 2
第1章 全新的系统 2
1.1新功能 2
1.1.1集合视图 3
1.1.2自动布局 3
1.1.3自动引用计数 3
1.1.4应用内购买的托管内容 4
1.1.5社交框架 4
1.1.6 UI状态保留 4
1.1.7其他新功能 4
1.2小结 6
1.3扩展阅读 6
第2章 熟悉Xcode 4和LLVM编译器 7
2.1了解用户界面 8
2.1.1标签式编辑器 9
2.1.2按键绑定的变化 9
2.1.3工程设置编辑器 10
2.1.4内置的版本控制系统 10
2.1.5工作区 10
2.2单窗口工作方式 10
2.3导航面板 11
2.3.1工程导航面板 12
2.3.2符号导航面板 12
2.3.3搜索导航面板 12
2.3.4问题导航面板 12
2.3.5调试导航面板 12
2.3.6断点导航面板 12
2.3.7日志导航面板 13
2.4辅助功能 13
2.5内置的Interface Builder 13
2.6 Xcode之核心:LLVM编译器 14
2.6.1 Clang编译器前端 15
2.6.2我是一个Bug!修复我 15
2.7 LLVM 4的新功能 15
2.7.1字面量 15
2.7.2字面量和可用性检查 18
2.7.3实例变量的自动合成 18
2.8使用Git进行版本控制 19
2.8.1内置的Git版本控制系统 19
2.8.2版本编辑器 19
2.8.3 Git最佳实践 19
2.9 Scheme 20
2.9.1为什么使用Scheme 20
2.9.2建议用Scheme实现你的意图 21
2.9.3创建一个Scheme 21
2.9.4共享你的Scheme 22
2.10为编译配置添加注释 22
2.10.1创建xcconfig文件 22
2.10.2重构编译配置文件 23
2.11将代码转换为支持ARC的Objective-C代码 23
2.12 Xcode 4 Organizer 25
2.12.1 Automatic Device Provisioning 25
2.12.2查看崩溃日志和控制台输出 25
2.12.3查看应用沙盒数据 26
2.12.4管理版本库 26
2.12.5管理应用程序归档 26
2.12.6查看Objective-C和SDK文档 26
2.13小结 26
2.14扩展阅读 26
2.14.1苹果文档 26
2.14.2 WWDC讲座 27
2.14.3博客 27
2.14.4网上资源 27
2.14.5图书 27
第二部分 熟能生巧 30
第3章 Objective-C基础知识 30
3.1命名约定 30
3.2自动引用计数 32
3.3属性 35
3.3.1属性修饰关键字 36
3.3.2属性最佳实践 37
3.3.3私有实例变量 37
3.4存取器 37
3.5分类和扩展 38
3.5.1+load方法 40
3.5.2使用关联引用为分类添加数据 40
3.5.3类扩展 42
3.6正式协议和非正式协议 42
3.7小结 43
3.8扩展阅读 44
3.8.1苹果文档 44
3.8.2其他资源 44
第4章 Cocoa设计模式 45
4.1理解模型-视图-控制器 45
4.1.1使用模型类 46
4.1.2使用视图类 46
4.1.3使用控制器类 47
4.2理解委托和数据源 47
4.3使用命令模式 48
4.3.1使用 目标-动作 48
4.3.2使用方法签名和调用 49
4.3.3使用蹦床 52
4.3.4撤销 55
4.4使用观察者模式 55
4.5使用单例模式 58
4.6小结 60
4.7扩展阅读 60
4.7.1苹果文档 60
4.7.2其他资源 61
第5章 通过Objective-C的ARC管理内存 62
5.1 Objective-C的ARC基础入门 62
5.1.1历史简介 62
5.1.2手动引用计数与自动引用计数 63
5.2什么是ARC 63
5.2.1在ARC工程中集成非ARC的第三方代码 64
5.2.2在非ARC工程中集成ARC代码 64
5.2.3框架中的ARC代码 64
5.2.4 ARC空声明变量 67
5.2.5 Objective-C命名约定 67
5.2.6覆盖默认行为 67
5.2.7自由桥接 68
5.2.8 ARC内部原理 68
5.3常见的ARC移植错误 69
5.4小结 72
5.5扩展阅读 72
5.5.1苹果文档 72
5.5.2 WWDC讲座 72
5.5.3博客 73
第6章 熟练使用表视图 74
6.1uITableView类的继承关系 74
6.2熟悉表视图 75
6.2.1 UITableViewController 75
6.2.2 UITableviewcell 75
6.2.3提高表视图的滚动速度 75
6.2.4自定义非重复表单元 82
6.2.5表视图最佳方案:编写简洁代码,简化控制器内容 83
6.3小结 87
6.4扩展阅读 87
6.4.1苹果文档 87
6.4.2其他资源 87
第7章 集合视图与自动布局 88
7.1集合视图 88
7.1.1类与协议 88
7.1.2示例 89
7.2自动布局 97
7.2.1使用自动布局 98
7.2.2了解自动布局 98
7.2.3相对布局约束 98
7.2.4视觉化格式语言 101
7.2.5调试布局错误 102
7.3小结 103
7.4扩展阅读 104
7.14.1苹果文档 104
7.14.2 WWDC讲座 104
第8章 绘图功能 105
8.1 iOS的不同绘图系统 105
8.2 UIKit和视图绘图周期 106
8.3视图绘制与视图布局 108
8.4自定义视图绘制 108
8.4.1通过UIKit绘图 109
8.4.2路径 109
8.4.3理解坐标系 111
8.4.4重新调整大小以及内容模式 114
8.4.5变形 115
8.4.6通过Core Graphics进行绘制 117
8.4.7混用UIKit与Core Graphics 120
8.4.8管理图形上下文 121
8.5优化UIView绘制 123
8.5.1避免绘图 123
8.5.2缓存与后台绘制 123
8.5.3自定义绘图与预渲染 123
8.5.4像素对齐与模糊文本 124
8.5.5透明、不透明与隐藏 125
8.6 CGLayer 125
8.7小结 127
8.8扩展阅读 127
8.8.1苹果文档 127
8.8.2其他资源 128
第9章 Core Animation 129
9.1视图动画 129
9.2管理用户交互 131
9.3图层绘制 132
9.3.1直接设置内容 134
9.3.2实现display方法 134
9.3.3自定义绘图 135
9.3.4在自己的上下文中绘图 136
9.4移动对象 136
9.4.1隐式动画 137
9.4.2显式动画 137
9.4.3模型与表示 138
9.4.4关于定时 140
9.5三维动画 142
9.6美化图层 145
9.7用动作实现自动动画 146
9.8为自定义属性添加动画 147
9.9 Core Animation与线程 148
9.10小结 149
9.11扩展阅读 149
9.11.1苹果文档 149
9.11.2其他资源 149
第10章 错误处理 150
10.1错误处理模式 150
10.2断言 151
10.3异常 153
10.4捕获与报告程序崩溃 153
10.5错误和NSError 154
10.6错误处理块 156
10.7日志 157
10.7.1记录敏感信息 158
10.7.2获取日志文件 159
10.8小结 159
10.9扩展阅读 159
10.9.1苹果文档 159
10.9.2其他资源 159
第11章 位置服务 161
11.1 Core Location框架 161
11.1.1获取用户位置 162
11.1.2使用内置的罗盘获取用户前进方向 162
11.1.3位置服务和用户隐私 163
11.2后台位置服务 165
11.2.1后台获取位置更新 165
11.2.2显著位置变更通知 165
11.2.3区域监控(地理围栏) 167
11.3位置模拟 167
11.4时刻关注电量消耗 168
11.5小结 168
11.6扩展阅读 168
第三部分 选择工具 170
第12章 表视图常用UI范例 170
12.1下拉刷新 170
12.2无限滚动 173
12.3行内编辑与键盘 175
12.4 uITableView的动画效果 177
12.5表视图动画的实际应用 178
12.5.1实现折叠列表 178
12.5.2实现选项抽屉 180
12.5.3在表视图单元格中使用手势识别器 181
12.6小结 181
12.7扩展阅读 182
第13章 多任务 183
13.1后台运行最佳实践:能力越大责任越大 183
13.2状态恢复系统 185
13.2.1测试状态恢复系统 186
13.2.2选择性加入 186
13.2.3应用启动过程的变化 187
13.2.4状态恢复标识符 187
13.2.5状态编码器与状态解码器 188
13.2.6表视图和集合视图 191
13.2.7状态恢复系统的高级应用 192
13.3多任务和运行循环简介 192
13.4以操作为中心的多任务开发 193
13.5用GCD实现多任务 197
13.5.1 GCD和ARC 198
13.5.2源和定时器 198
13.5.3用分派屏障创建同步点 199
13.5.4队列目标和优先级 200
13.5.5分派组 201
13.5.6队列关联数据 202
13.5.7分派数据 202
13.6小结 203
13.7扩展阅读 203
13.7.1苹果文档 203
13.7.2 WWDC讲座 203
13.7.3其他资源 203
第14章 REST解惑 204
14.1 REST简介 205
14.2选择数据交换格式 205
14.2.1在iOS中解析XML 205
14.2.2在iOS中解析JSON 206
14.2.3 XML与JSON 207
14.2.4模型版本化 208
14.3假想的Web服务 208
14.4重要提醒 209
14.5 RESTfulEngine架构(iHotelApp示例代码) 209
14.5.1 NSURLConnection与第三方框架 209
14.5.2创建RESTfulEngine 210
14.5.3使用访问令牌对API调用进行认证 213
14.5.4在RESTfulEngine.M中覆盖相关方法以添加自定义认证头部 213
14.5.5取消请求 214
14.5.6请求响应 214
14.5.7对JSON数据进行键值编码 215
14.5.8列表页面的JSON对象与详细页面的JSON对象 217
14.5.9嵌套JSON对象 217
14.5.10少即是多 219
14.5.11错误处理 219
14.5.12本地化 221
14.5.13使用分类处理其他格式 221
14.5.14在iOS中提升性能的小技巧 222
14.6小结 222
14.7扩展阅读 222
14.7.1苹果文档 222
14.7.2其他资源 223
第15章 通过安全服务巩固系统安全 224
15.1理解iOS沙盒 224
15.2保证网络通信的安全 225
15.2.1证书工作原理 226
15.2.2检验证书的有效性 228
15.2.3判断证书的可信度 231
15.3使用文件保护 233
15.4使用钥匙串 234
15.5使用加密 236
15.5.1 AES概要 237
15.5.2使用PBKDF2将密码转换成密钥 237
15.5.3 AES模式和填充 239
15.5.4初始化向量 240
15.5.5使用HMAC进行认证 241
15.5.6错误的密码 241
15.5.7进行单槽加密 242
15.5.8提高CommonCrypto的性能 244
15.5.9组合使用加密和压缩 247
15.6小结 247
15.7扩展阅读 248
15.7.1苹果文档 248
15.7.2 WWDC讲座 248
15.7.3其他资源 248
第16章 在多个苹果平台和苹果设备上运行应用 249
16.1开发多平台应用 249
16.1.1可配置的目标设置:BaseSDK和Deployment Target 250
16.1.2支持多个SDK时的注意事项:框架、类和方法 250
16.1.3检查框架、类和方法的可用性 252
16.2检测设备的功能 253
16.2.1检测设备及判断功能 253
16.2.2检测硬件和传感器 254
16.3应用内发送Email和短信 258
16.4检查多任务支持 258
16.5支持iPhone 5 259
16.6 UIRequiredDeviceCapabilities 260
16.7小结 261
16.8扩展阅读 262
16.8.1苹果文档 262
16.8.2其他资源 262
第17章 国际化和本地化 263
17.1什么是本地化 263
17.2本地化字符串 264
17.3对未本地化的字符串进行审查 265
17.4格式化数字和日期 266
17.5 nib文件和Base Internationalization 269
17.6本地化复杂字符串 270
17.7小结 272
17.8扩展阅读 272
17.8.1苹果文档 272
17.8.2 WWDC讲座 272
第18章 通过应用内购买提高销售业绩 273
18.1开始之前 273
18.2应用内购买什么 273
18.2.1禁止通过应用内购买出售的产品 274
18.2.2重新思考你的商业模式 275
18.3在iTunes Connect上设置产品配置 275
18.3.1第一步:为你的应用创建一个新的App ID 276
18.3.2第二步:生成配置文件 277
18.3.3第三步:创建应用的产品项 277
18.3.4第四步:创建应用内购买产品项 278
18.3.5第五步:生成共享密钥 279
18.3.6第六步:创建测试账户 279
18.3.7第七步:创建托管内容 279
18.4实现应用内购买 281
18.5 MKStoreKit简介 281
18.5.1为什么要用MKStoreKit 281
18.5.2 MKStoreKit的设计 282
18.5.3定制MKStoreKit 283
18.6实现购买 285
18.7下载托管内容 285
18.8测试代码 286
18.9排错 286
18.9.1无效的产品ID 286
18.9.2无法连接iTunes Store 286
18.9.3你已经购买了该产品,但它尚未下载 287
18.10小结 287
18.11扩展阅读 287
18.11.1苹果文档 287
18.11.2博客 287
18.11.3其他资源 287
第19章 调试 288
19.1 LLDB 288
19.2使用LLDB进行调试 288
19.2.1 dSYM文件 289
19.2.2符号化 290
19.3断点 291
19.4观察点 294
19.5 LLDB控制台 295
19.6 NSZombieEnabled标志 298
19.7不同的崩溃类型 299
19.7.1 EXC BAD ACCESS 299
19.7.2 SIGSEGV 300
19.7.3 SIGBUS 300
19.7.4 SIGTRAP 300
19.7.5 EXC ARITHMETIC 300
19.7.6 SIGILL 300
19.7.7 SIGABRT 301
19.7.8看门狗超时 301
19.7.9自定义错误信号处理程序 301
19.8收集崩溃报告 302
19.9第三方崩溃报告服务 303
19.10小结 303
19.11扩展阅读 304
19.11.1苹果文档 304
19.11.2 WWDC讲座 304
19.11.3其他资源 304
第20章 性能调优 305
20.1性能思维模式 305
20.1.1指导方针一:产品是为了取悦用户才存在的 305
20.1.2指导方针二:设备是为了方便用户而存在的 305
20.1.3指导方针三:做到极致 305
20.1.4指导方针四:用户的感知才是实际的 306
20.1.5指导方针五:关注能带来大收益的方面 306
20.2欢迎走入Instruments的世界 306
20.3查找内存问题 308
20.4查找CPU问题 311
20.4.1 Accelerate框架 314
20.4.2 GLKit 315
20.5绘图性能 315
20.6优化磁盘访问和网络访问 317
20.7小结 318
20.8扩展阅读 318
20.8.1苹果文档 318
20.8.2其他资源 318
第四部分 超越极限 320
第21章 故事板及自定义切换效果 320
21.1初识故事板 320
21.1.1实例化故事板 321
21.1.2加载故事板中的视图控制器 321
21.1.3联线 321
21.1.4使用故事板来实现表视图 323
21.2自定义切换效果 324
21.2.1还有一个优点 325
21.2.2白璧微瑕 326
21.3使用uIAppearance协议自定义视图 326
21.4小结 327
21.5扩展阅读 327
21.5.1苹果文档 327
21.5.2 WWDC讲座 327
21.5.3其他资源 327
第22章 Cocoa的大招:键值编码和观察 328
22.1键值编码 328
22.1.1用KVC赋值 330
22.1.2用键路径遍历属性 331
22.1.3 KVC和容器类 331
22.1.4 KVC和字典 335
22.1.5 KVC和非对象 336
22.1.6用KVC实现高阶消息传递 336
22.1.7容器操作符 336
22.2键值观察 337
22.2.1 KVO和容器类 339
22.2.2 KVO是如何实现的 340
22.3 KVO的权衡 340
22.4小结 342
22.5扩展阅读 342
22.5.1苹果文档 342
22.5.2其他资源 342
第23章 不同凡想:块和函数式编程 343
23.1什么是块 343
23.1.1为什么要用函数式编程 343
23.1.2“函数式”uIAlertView 344
23.2声明块 345
23.2.1变量作用域 346
23.2.2栈与堆 346
23.3实现块 347
23.4块和并发 349
23.4.1 GCD中的分派队列 349
23.4.2 NSoperationQueue与GCD分派队列 350
23.5基于块的Cocoa方法 351
23.5.1 uIview的动画使用块 351
23.5.2展示和移除视图控制器 352
23.5.3 TweetComposer与应用程序中发送邮件(短信) 352
23.5.4用NSDictionary的enumerationWithBlock遍历字典 352
23.5.5寻找基于块的方法 353
23.6支持情况 353
23.7小结 353
23.8扩展阅读 354
23.8.1苹果文档 354
23.8.2博客 354
23.8.3其他资源 354
第24章 离线支持 355
24.1需要离线支持的原因 355
24.2缓存策略 356
24.2.1存储缓存 356
24.2.2缓存版本和失效 359
24.3数据模型缓存 359
24.4缓存版本控制 363
24.5创建内存缓存 364
24.5.1为AppCache设计内存缓存 365
24.5.2处理内存警告 366
24.5.3处理结束和进入后台通知 367
24.6创建URL缓存 367
24.6.1过期模型 368
24.6.2验证模型 368
24.6.3示例 368
24.6.4用URL缓存来缓存图片 369
24.7小结 369
24.8扩展阅读 369
24.8.1苹果文档 369
24.8.2书籍 369
24.8.3其他资源 369
第25章 云端数据 370
25.1 iCloud 370
25.2第三方云服务提供商 372
25.3 Parse 373
25.3.1 Parse入门 373
25.3.2 Parse的顶层对象 374
25.3.3代码 374
25.4 StackMob 376
25.4.1设置StackMob 376
25.4.2登录、上传和获取数据 377
25.4.3 StackMob自定义代码 377
25.5后端即服务的缺点 378
25.6小结 378
25.7扩展阅读 378
25.7.1苹果文档 378
25.7.2 WWDC讲座 378
25.7.3其他资源 379
第26章 精妙的文本布局 380
26.1基本控件:字段、视图和标签 380
26.2 UIKit中的富文本 381
26.2.1理解粗体、斜体和下划线 381
26.2.2属性化字符串 382
26.2.3段落样式 384
26.2.4属性化字符串和HTML 384
26.3用Web视图显示富文本 385
26.3.1在Web视图中显示和访问HTML 385
26.3.2响应用户交互 386
26.3.3在滚动视图和表格视图中绘制Web视图 386
26.4 Core Text 387
26.4.1用CTFramesetter进行简单的布局 387
26.4.2为非连续路径创建框架 388
26.4.3排版器、文本行、连续文本和字形 390
26.4.4沿着曲线绘制文本 391
26.5小结 395
26.6扩展阅读 395
26.6.1苹果文档 395
26.6.2 WWDC讲座 395
26.6.3其他资源 396
第27章 创建Core Foundation应用 397
27.1 Core Foundation类型 397
27.2命名和内存管理 398
27.3分配器 399
27.4内省 400
27.5字符串和数据 400
27.5.1常量字符串 401
27.5.2创建字符串 401
27.5.3转换为C字符串 402
27.5.4其他字符串操作符 404
27.5.5字符串的支持存储 404
27.5.6 CFData 405
27.6容器类型 405
27.6.1 CFArray 406
27.6.2 CFDictionary 406
27.6.3 CFSet和CFBag 406
27.6.4其他容器类型 407
27.6.5回调函数 407
27.7自由桥接 408
27.8小结 411
27.9扩展阅读 411
27.9.1苹果文档 411
27.9.2其他资源 411
第28章 深度解析Objective-C 412
28.1理解类和对象 412
28.2使用方法和属性 414
28.3消息传递如何工作 416
28.3.1动态实现 417
28.3.2快速转发 419
28.3.3普通转发 422
28.3.4转发失败 422
28.3.5各种版本的objc_msgSend 423
28.4方法混写 423
28.5 ISA混写 426
28.6方法混写与ISA混写 427
28.7小结 427
28.8扩展阅读 427
28.8.1苹果文档 427
28.8.2其他资源 428
索引 429