编辑推荐
      深度揭秘iOS 6高级特性与开发技巧
  发掘实践,借鉴开发经验,真正掌控iOS开发
  移动开发进阶必备,在平台上打造非凡应用
  具体如下:
  首先,它是国内的ios 6图书
  第二:新增一章讲解如何将数据上传到云端
  第三:涵盖了iOS 6的大部分新功能,包括集合视图和自动布局(第7章),还有一整章介绍自动引用计数。
  第四:ios 6增加了关于调试(第19章)、性能调优(第20章)以及集合视图和自动布局(第7章)的新内容
  《图灵程序设计丛书:iOS 6编程实战》适合具有一定iOS 开发经验,致力于深入了解iOS 开发、实践以及他人实际开发经验的人学习参考。
      内容简介
     iOS开发如日中天,iOS 6又为我们带来了大量的高级特性,从事移动开发的你,还等什么?
  《图灵程序设计丛书:iOS 6编程实战》急开发者之所急,揭秘了多数开发类图书未曾展示过的iOS 6高级特性和开发技巧,带你深入了解iOS 6。作者结合自己多年的实践经验,毫无保留、面面俱到地讲解了如何充分利用强大的SDK将你的移动开发技能发挥到极点。全书涵盖了安全、多任务处理、多平台运行、块与函数式编程、高级文本布局、性能调优,以及如何通过应用内购买功能提高销售业绩。
  久经“杀场”的两位作者Rob Napier和Mugunth Kumar在本书中分享了他们为苹果移动设备开发“杀手级”应用的宝贵经验。以下是《图灵程序设计丛书:iOS 6编程实战》部分精彩内容摘录:
  兼容iPhone 5充分利用集合视图
  操作Objective-C运行时    性能调优和消除BUG
  用Security Services确保数据安全  面向REST式Web服务创建高性能应用
  实现诱人的动画效果     在网络连接质量不一的情况下实现超快缓存
  用Core Text打造精妙的文本布局  充分发挥Core Foundation的强大功能     
作者简介
     Rob Napier,2005年开始从事Mac开发,iPhone SDK第一版发布时就开始开发iPhone应用。他是The Daily、PandoraBoy和Cisco Mobile的作者,Stack Overflow的主要贡献者,并且维护着技术博客Cocoaphony,主要关注组网、性能、安全和MVC模式。他自建了三套房子,喜欢徒步旅行,还是一位自豪的父亲。
  Mugunth Kumar,新加坡独立iOS开发者,拥有新加坡南洋理工大学硕士学位,主修信息系统。其个人博客(blog.mugunthkumar.com)主要发表移动开发、软件可用性、用户体验和iOS相关的文章。从事iOS开发前,他在财富500强企业通用电气和霍尼韦尔担任Windows和.NET平台软件顾问。他关注的领域包括编程方法论(面向对象和函数式编程)、移动开发以及可用性设计。不写代码的时候,他会到国外拍摄一些大自然风景。
  译者简介:
  陈晓亮,iOS开发工程师,主要关注Linux、Mac和iOS,喜欢Lisp,也喜欢Objective-C。
  武海峰,Linux系统工程师,主要关注GNU/Linux和移动互联应用,热衷于开源软件。曾在商业Linux厂商和移动互联网Startup任职,从事Android系统集成、商业Linux发行版集成及移动互联网产品开发。
  邓强,高级软件工程师,关注互联网行业,对互联网产品和技术有深厚兴趣,Apple粉,Google粉,Amazon粉。目前就职于美国道富银行杭州研发中心,从事金融行业软件系统开发。
  周庆成,互联网与移动应用开发者,对iOS等移动系统拥有极大兴趣,开发过iPad版三人斗地主等游戏,且对于各种系统平台与编程语言都有研究。此外,他还翻译了《Objective-C基础教程(第2版)》。目前居于上海,从事游戏与网络应用开发。     
内页插图
          精彩书评
     “我读过另外3本iOS开发教程,却仍然存有很多疑问。但这本不同。正如其‘前言’中所说,它真正‘让你了解为什么这么做而不只是局限于怎么做’。”
  “我看过本书上一版,因此这一版出来后我毫不犹豫就将它放进了购物车。本书是iOS开发进阶的基石。我将本书介绍给了公司内一些年轻的iOS开发者,他们对它给出了一致好评。”
  ——读者评论     
目录
   第一部分  全新功能
第1章  全新的系统
1.1  新功能
1.1.1  集合视图
1.1.2  自动布局
1.1.3  自动引用计数
1.1.4  应用内购买的托管内容
1.1.5  社交框架
1.1.6  UI状态保留
1.1.7  其他新功能
1.2  小结
1.3  扩展阅读
第2章  熟悉Xcode 4和LLVM编译器
2.1  了解用户界面
2.1.1  标签式编辑器
2.1.2  按键绑定的变化
2.1.3  工程设置编辑器
2.1.4  内置的版本控制系统
2.1.5  工作区
2.2  单窗口工作方式
2.3  导航面板
2.3.1  工程导航面板
2.3.2  符号导航面板
2.3.3  搜索导航面板
2.3.4  问题导航面板
2.3.5  调试导航面板
2.3.6  断点导航面板
2.3.7  日志导航面板
2.4  辅助功能
2.5  内置的Interface Builder
2.6  Xcode之核心:LLVM编译器
2.6.1  Clang编译器前端
2.6.2  我是一个Bug!修复我
2.7  LLVM  4的新功能
2.7.1  字面量
2.7.2  字面量和可用性检查
2.7.3  实例变量的自动合成
2.8  使用Git进行版本控制
2.8.1  内置的Git版本控制系统
2.8.2  版本编辑器
2.8.3  Git最佳实践
2.9  Scheme
2.9.1  为什么使用Scheme
2.9.2  建议用Scheme实现你的意图
2.9.3  创建一个Scheme
2.9.4  共享你的Scheme
2.10  为编译配置添加注释
2.10.1  创建xcconfig文件
2.10.2  重构编译配置文件
2.11  将代码转换为支持ARC的Objective-C代码
2.12  Xcode 4 Organizer
2.12.1  Automatic Device Provisioning
2.12.2  查看崩溃日志和控制台输出
2.12.3  查看应用沙盒数据
2.12.4  管理版本库
2.12.5  管理应用程序归档
2.12.6  查看Objective-C和SDK文档
2.13  小结
2.14  扩展阅读
2.14.1  苹果文档
2.14.2  WWDC讲座
2.14.3  博客
2.14.4  网上资源
2.14.5  图书
第二部分  熟能生巧
第3章  Objective-C基础知识
3.1  命名约定
3.2  自动引用计数
3.3  属性
3.3.1  属性修饰关键字
3.3.2  属性最佳实践
3.3.3  私有实例变量
3.4  存取器
3.5  分类和扩展
3.5.1  +load方法
3.5.2  使用关联引用为分类添加数据
3.5.3  类扩展
3.6  正式协议和非正式协议
3.7  小结
3.8  扩展阅读
3.8.1  苹果文档
3.8.2  其他资源
第4章  Cocoa设计模式
4.1  理解模型·视图·控制器
4.1.1  使用模型类
4.1.2  使用视图类
4.1.3  使用控制器类
4.2  理解委托和数据源
4.3  使用命令模式
4.3.1  使用目标·动作
4.3.2  使用方法签名和调用
4.3.3  使用蹦床
4.3.4  撤销
4.4  使用观察者模式
4.5  使用单例模式
4.6  小结
4.7  扩展阅读
4.7.1  苹果文档
4.7.2  其他资源
第5章  通过Objective-C的ARC管理内存
5.1  Objective-C的ARC基础入门
5.1.1  历史简介
5.1.2  手动引用计数与自动引用计数
5.2  什么是ARC
5.2.1  在ARC工程中集成非ARC的第三方代码
5.2.2  在非ARC工程中集成ARC代码
5.2.3  框架中的ARC代码
5.2.4  ARC空声明变量
5.2.5  Objective-C命名约定
5.2.6  覆盖默认行为
5.2.7  自由桥接
5.2.8  ARC内部原理
5.3  常见的ARC移植错误
5.4  小结
5.5  扩展阅读
5.5.1  苹果文档
5.5.2  WWDC讲座
5.5.3  博客
第6章  熟练使用表视图
6.1  UITableView类的继承关系
6.2  熟悉表视图
6.2.1  UITableViewController
6.2.2  UITableViewCell
6.2.3  提高表视图的滚动速度
6.2.4  自定义非重复表单元
6.2.5  表视图最佳方案:编写简洁代码,简化控制器内容
6.3  小结
6.4  扩展阅读
6.4.1  苹果文档
6.4.2  其他资源
第7章  集合视图与自动布局
7.1  集合视图
7.1.1  类与协议
7.1.2  示例
7.2  自动布局
7.2.1  使用自动布局
7.2.2  了解自动布局
7.2.3  相对布局约束
7.2.4  视觉化格式语言
7.2.5  调试布局错误
7.3  小结
7.4  扩展阅读
7.14.1  苹果文档
7.14.2  WWDC讲座
第8章  绘图功能
8.1  iOS的不同绘图系统
8.2  UIKit和视图绘图周期
8.3  视图绘制与视图布局
8.4  自定义视图绘制
8.4.1  通过UIKit绘图
8.4.2  路径
8.4.3  理解坐标系
8.4.4  重新调整大小以及内容模式
8.4.5  变形
8.4.6  通过Core Graphics进行绘制
8.4.7  混用UIKit与Core Graphics
8.4.8  管理图形上下文
8.5  优化UIView绘制
8.5.1  避免绘图
8.5.2  缓存与后台绘制
8.5.3  自定义绘图与预渲染
8.5.4  像素对齐与模糊文本
8.5.5  透明、不透明与隐藏
8.6  CGLayer
8.7  小结
8.8  扩展阅读
8.8.1  苹果文档
8.8.2  其他资源
第9章  Core Animation
9.1  视图动画
9.2  管理用户交互
9.3  图层绘制
9.3.1  直接设置内容
9.3.2  实现display方法
9.3.3  自定义绘图
9.3.4  在自己的上下文中绘图
9.4  移动对象
9.4.1  隐式动画
9.4.2  显式动画
9.4.3  模型与表示
9.4.4  关于定时
9.5  三维动画
9.6  美化图层
9.7  用动作实现自动动画
9.8  为自定义属性添加动画
9.9  Core Animation与线程
9.10  小结
9.11  扩展阅读
9.11.1  苹果文档
9.11.2  其他资源
第10章  错误处理
10.1  错误处理模式
10.2  断言
10.3  异常
10.4  捕获与报告程序崩溃
10.5  错误和NSError
10.6  错误处理块
10.7  日志
10.7.1  记录敏感信息
10.7.2  获取日志文件
10.8  小结
10.9  扩展阅读
10.9.1  苹果文档
10.9.2  其他资源
第11章  位置服务
11.1  Core Location框架
11.1.1  获取用户位置
11.1.2  使用内置的罗盘获取用户前进方向
11.1.3  位置服务和用户隐私
11.2  后台位置服务
11.2.1  后台获取位置更新
11.2.2  显著位置变更通知
11.2.3  区域监控(地理围栏)
11.3  位置模拟
11.4  时刻关注电量消耗
11.5  小结
11.6  扩展阅读
第三部分  选择工具
第12章  表视图常用UI范例
12.1  下拉刷新
12.2  无限滚动
12.3  行内编辑与键盘
12.4  UITableView的动画效果
12.5  表视图动画的实际应用
12.5.1  实现折叠列表
12.5.2  实现选项抽屉
12.5.3  在表视图单元格中使用手势识别器
12.6  小结
12.7  扩展阅读
第13章  多任务
13.1  后台运行最佳实践:能力越大责任越大
13.2  状态恢复系统
13.2.1  测试状态恢复系统
13.2.2  选择性加入
13.2.3  应用启动过程的变化
13.2.4  状态恢复标识符
13.2.5  状态编码器与状态解码器
13.2.6  表视图和集合视图
13.2.7  状态恢复系统的高级应用
13.3  多任务和运行循环简介
13.4  以操作为中心的多任务开发
13.5  用GCD实现多任务
13.5.1  GCD和ARC
13.5.2  源和定时器
13.5.3  用分派屏障创建同步点
13.5.4  队列目标和优先级
13.5.5  分派组
13.5.6  队列关联数据
13.5.7  分派数据
13.6  小结
13.7  扩展阅读
13.7.1  苹果文档
13.7.2  WWDC讲座
13.7.3  其他资源
第14章  REST解惑
14.1  REST简介
14.2  选择数据交换格式
14.2.1  在iOS中解析XML
14.2.2  在iOS中解析JSON
14.2.3  XML与JSON
14.2.4  模型版本化
14.3  假想的Web服务
14.4  重要提醒
14.5  RESTfulEngine架构(iHotelApp示例代码)
14.5.1  NSURLConnection与第三方框架
14.5.2  创建RESTfulEngine
14.5.3  使用访问令牌对API调用进行认证
14.5.4  在RESTfulEngine.m中覆盖相关方法以添加自定义认证头部
14.5.5  取消请求
14.5.6  请求响应
14.5.7  对JSON数据进行键值编码
14.5.8  列表页面的JSON对象与详细页面的JSON对象
14.5.9  嵌套JSON对象
14.5.10  少即是多
14.5.11  错误处理
14.5.12  本地化
14.5.13  使用分类处理其他格式
14.5.14  在iOS中提升性能的小技巧
14.6  小结
14.7  扩展阅读
14.7.1  苹果文档
14.7.2  其他资源
第15章  通过安全服务巩固系统安全
15.1  理解iOS沙盒
15.2  保证网络通信的安全
15.2.1  证书工作原理
15.2.2  检验证书的有效性
15.2.3  判断证书的可信度
15.3  使用文件保护
15.4  使用钥匙串
15.5  使用加密
15.5.1  AES概要
15.5.2  使用PBKDF2将密码转换成密钥
15.5.3  AES模式和填充
15.5.4  初始化向量
15.5.5  使用HMAC进行认证
15.5.6  错误的密码
15.5.7  进行单槽加密
15.5.8  提高CommonCrypto的性能
15.5.9  组合使用加密和压缩
15.6  小结
15.7  扩展阅读
15.7.1  苹果文档
15.7.2  WWDC讲座
15.7.3  其他资源
第16章  在多个苹果平台和苹果设备上运行应用
16.1  开发多平台应用
16.1.1  可配置的目标设置:Base SDK和Deployment Target
16.1.2  支持多个SDK时的注意事项:框架、类和方法
16.1.3  检查框架、类和方法的可用性
16.2  检测设备的功能
16.2.1  检测设备及判断功能
16.2.2  检测硬件和传感器
16.3  应用内发送Email和短信
16.4  检查多任务支持
16.5  支持iPhone 5
16.6  UIRequiredDeviceCapabilities
16.7  小结
16.8  扩展阅读
16.8.1  苹果文档
16.8.2  其他资源
第17章  国际化和本地化
17.1  什么是本地化
17.2  本地化字符串
17.3  对未本地化的字符串进行审查
17.4  格式化数字和日期
17.5  nib文件和Base Internationalization
17.6  本地化复杂字符串
17.7  小结
17.8  扩展阅读
17.8.1  苹果文档
17.8.2  WWDC讲座
第18章  通过应用内购买提高销售业绩
18.1  开始之前
18.2  应用内购买什么
18.2.1  禁止通过应用内购买出售的产品
18.2.2  重新思考你的商业模式
18.3  在iTunes Connect上设置产品配置
18.3.1  第一步:为你的应用创建一个新的App ID
18.3.2  第二步:生成配置文件
18.3.3  第三步:创建应用的产品项
18.3.4  第四步:创建应用内购买产品项
18.3.5  第五步:生成共享密钥
18.3.6  第六步:创建测试账户
18.3.7  第七步:创建托管内容
18.4  实现应用内购买
18.5  MKStoreKit简介
18.5.1  为什么要用MKStoreKit
18.5.2  MKStoreKit的设计
18.5.3  定制MKStoreKit
18.6  实现购买
18.7  下载托管内容
18.8  测试代码
18.9  排错
18.9.1  无效的产品ID
18.9.2  无法连接iTunes Store
18.9.3  你已经购买了该产品,但它尚未下载
18.10  小结
18.11  扩展阅读
18.11.1  苹果文档
18.11.2  博客
18.11.3  其他资源
第19章  调试
19.1  LLDB
19.2  使用LLDB进行调试
19.2.1  dSYM文件
19.2.2  符号化
19.3  断点
19.4  观察点
19.5  LLDB控制台
19.6  NSZombieEnabled标志
19.7  不同的崩溃类型
19.7.1  EXC_BAD_ACCESS
19.7.2  SIGSEGV
19.7.3  SIGBUS
19.7.4  SIGTRAP
19.7.5  EXC_ARITHMETIC
19.7.6  SIGILL
19.7.7  SIGABRT
19.7.8  看门狗超时
19.7.9  自定义错误信号处理程序
19.8  收集崩溃报告
19.9  第三方崩溃报告服务
19.10  小结
19.11  扩展阅读
19.11.1  苹果文档
19.11.2  WWDC讲座
19.11.3  其他资源
第20章  性能调优
20.1  性能思维模式
20.1.1  指导方针一:产品是为了取悦用户才存在的
20.1.2  指导方针二:设备是为了方便用户而存在的
20.1.3  指导方针三:做到极致
20.1.4  指导方针四:用户的感知才是实际的
20.1.5  指导方针五:关注能带来大收益的方面
20.2  欢迎走入Instruments的世界
20.3  查找内存问题
20.4  查找CPU问题
20.4.1  Accelerate框架
20.4.2  GLKit
20.5  绘图性能
20.6  优化磁盘访问和网络访问
20.7  小结
20.8  扩展阅读
20.8.1  苹果文档
20.8.2  其他资源
第四部分  超越极限
第21章  故事板及自定义切换效果
21.1  初识故事板
21.1.1  实例化故事板
21.1.2  加载故事板中的视图控制器
21.1.3  联线
21.1.4  使用故事板来实现表视图
21.2  自定义切换效果
21.2.1  还有一个优点
21.2.2  白璧微瑕
21.3  使用UIAppearance协议自定义视图
21.4  小结
21.5  扩展阅读
21.5.1  苹果文档
21.5.2  WWDC讲座
21.5.3  其他资源
第22章  Cocoa的大招:键值编码和观察
22.1  键值编码
22.1.1  用KVC赋值
22.1.2  用键路径遍历属性
22.1.3  KVC和容器类
22.1.4  KVC和字典
22.1.5  KVC和非对象
22.1.6  用KVC实现高阶消息传递
22.1.7  容器操作符
22.2  键值观察
22.2.1  KVO和容器类
22.2.2  KVO是如何实现的
22.3  KVO的权衡
22.4  小结
22.5  扩展阅读
22.5.1  苹果文档
22.5.2  其他资源
第23章  不同凡想:块和函数式编程
23.1  什么是块
23.1.1  为什么要用函数式编程
23.1.2  “函数式”UIAlertView
23.2  声明块
23.2.1  变量作用域
23.2.2  栈与堆
23.3  实现块
23.4  块和并发
23.4.1  GCD中的分派队列
23.4.2  NSOperationQueue与GCD分派队列
23.5  基于块的Cocoa方法
23.5.1  UIView的动画使用块
23.5.2  展示和移除视图控制器
23.5.3  TweetComposer 与应用程序中发送邮件(短信)
23.5.4  用NSDictionary的enum erationWithBlock遍历字典
23.5.5  寻找基于块的方法
23.6  支持情况
23.7  小结
23.8  扩展阅读
23.8.1  苹果文档
23.8.2  博客
23.8.3  其他资源
第24章  离线支持
24.1  需要离线支持的原因
24.2  缓存策略
24.2.1  存储缓存
24.2.2  缓存版本和失效
24.3  数据模型缓存
24.4  缓存版本控制
24.5  创建内存缓存
24.5.1  为AppCache设计内存缓存
24.5.2  处理内存警告
24.5.3  处理结束和进入后台通知
24.6  创建URL缓存
24.6.1  过期模型
24.6.2  验证模型
24.6.3  示例
24.6.4  用URL缓存来缓存图片
24.7  小结
24.8  扩展阅读
24.8.1  苹果文档
24.8.2  书籍
24.8.3  其他资源
第25章  云端数据
25.1  iCloud
25.2  第三方云服务提供商
25.3  Parse
25.3.1  Parse入门
25.3.2  Parse的顶层对象
25.3.3  代码
25.4  StackMob
25.4.1  设置StackMob
25.4.2  登录、上传和获取数据
25.4.3  StackMob自定义代码
25.5  后端即服务的缺点
25.6  小结
25.7  扩展阅读
25.7.1  苹果文档
25.7.2  WWDC讲座
25.7.3  其他资源
第26章  精妙的文本布局
26.1  基本控件:字段、视图和标签
26.2  UIKit中的富文本
26.2.1  理解粗体、斜体和下划线
26.2.2  属性化字符串
26.2.3  段落样式
26.2.4  属性化字符串和HTML
26.3  用Web视图显示富文本
26.3.1  在Web视图中显示和访问HTML
26.3.2  响应用户交互
26.3.3  在滚动视图和表格视图中绘制Web视图
26.4  Core Text
26.4.1  用CTFramesetter进行简单的布局
26.4.2  为非连续路径创建框架
26.4.3  排版器、文本行、连续文本和字形
26.4.4  沿着曲线绘制文本
26.5  小结
26.6  扩展阅读
26.6.1  苹果文档
26.6.2  WWDC讲座
26.6.3  其他资源
第27章  创建Core Foundation应用
27.1  Core Foundation类型
27.2  命名和内存管理
27.3  分配器
27.4  内省
27.5  字符串和数据
27.5.1  常量字符串
27.5.2  创建字符串
27.5.3  转换为C字符串
27.5.4  其他字符串操作符
27.5.5  字符串的支持存储
27.5.6  CFData
27.6  容器类型
27.6.1  CFArray
27.6.2  CFDictionary
27.6.3  CFSet和CFBag
27.6.4  其他容器类型
27.6.5  回调函数
27.7  自由桥接
27.8  小结
27.9  扩展阅读
27.9.1  苹果文档
27.9.2  其他资源
第28章  深度解析Objective-C
28.1  理解类和对象
28.2  使用方法和属性
28.3  消息传递如何工作
28.3.1  动态实现
28.3.2  快速转发
28.3.3  普通转发
28.3.4  转发失败
28.3.5  各种版本的objc_msgSend
28.4  方法混写
28.5  ISA混写
28.6  方法混写与ISA混写
28.7  小结
28.8  扩展阅读
28.8.1  苹果文档
28.8.2  其他资源
索引      
前言/序言
     苹果操作系统历来都是一个面向用户的版本,一个面向开发者的版本,这样交替着发布。iOS 6更多关注用户,具有全新的地图界面和导航功能,社交网络特性更是随处可见。Pass Kit更以一种全新的方式将iPhone与日常生活联系到了一起。增强的Siri功能使iPhone 4S更具吸引力。但愿用户能快一点升级。
  这都是好消息,因为iOS 6同样也令开发人员兴奋不已。很多事物变得更加简单,集合视图与自动布局可以简化UI设计,UIKit添加了对富文本的支持。当你的应用进入后台,状态保留可以更加容易记录它们的进度。很多过去复杂麻烦的东西开始变得简单了。
  如果你准备好了去探索最新的苹果系统,从而把你的应用提升到新高度,那这本书就是你应该看的。
  读者对象
  这并不是一本入门书。其他一些书会教你Objective-C并一步步指导你学习Interface Builder,不过本书假定你已经拥有一些iOS开发经验;可能是自学的,或者上过培训班。总之,你有能力写程序,甚至已经有应用上架了。如果你打算学习更深入的内容、最佳实践,以及作者源自真实工程的开发经验,那你就找对书了。
  这本书并不是示例的简单堆砌,它包含大量代码,不过主线还是围绕如何设计、编写和维护优秀的iOS应用展开。本书会让你了解为什么这么做而不只是局限于怎么做。你会学到很多关于设计模式、编写可重用代码,以及语法与新框架的知识。
  本书内容
  iOS平台总是向前发展,本书也一样。书中大部分示例需要至少iOS 5才能运行,有些需要iOS 6。所有的示例都启用了自动引用计数、自动属性合成和对象字面量。除了很少几处外,本书不会讨论向后兼容。如果你的代码过于庞大必须要向后兼容,你可能知道如何处理。本书主旨是通过最好的特性来创造最佳应用。
  虽然本书主要针对iPhone 4、iPad 2之后的设备,但大部分内容也适用于第一代iPad、iPod touch、iPhone 3GS以及Apple TV。第16章还会专门讨论如何处理各个平台之间的差异。
  新版内容
  这一版涵盖了iOS 6的大部分新功能,包括集合视图和自动布局(第7章),还有一整章介绍自动引用计数。本书新增一章讲解如何将数据上传到云端,介绍了一些第三方BaaS(Backend as a Service,后端即服务)。本书还扩展了iOS相关的内容,主要涵盖改进后的LLVM编译器与调试器。为此,我们增加了第2章LLVM一节的篇幅,针对如何使用它写出下一代应用讲解了LLVM的重要特性。它还添加了一章(第19章)专门介绍LLDB调试,包括Python脚本、寄存器布局和读取寄存器等一些有助于解决调试难题的高级技巧。这一章还提到了otool、atos等可以辅助调试的命令行工具。最后,第20章展示了如何围绕CPU性能、内存占用、网络带宽以及电池使用进行优化。
  即便你有本书的上一版,关于调试(第19章)、性能调优(第20章)以及集合视图和自动布局(第7章)的新内容也足够成为你买下这一版的理由了。
  本书结构
  iOS提供了非常丰富的工具,既有UIKit这样的高层框架,也有Core Text这样的低层框架。有时候,同一个目标可以通过多种方式来达成。作为开发人员,如何找到最正确的工具呢?
  本书既考虑了日常开发需求,也考虑了特定的用途,能够帮你作出正确的选择。学完本书,你会明白每个框架存在的价值、框架之间的相互关系,以及什么时候选择哪一个。最终,你会知道哪个框架最适合解决哪一类问题。
  本书分4部分,从最常用的工具一直讲到最强大的工具。这一版新增的章会在前面用“更新”字样标识出来。
  第一部分:新功能
  如果你对iOS 5很熟悉,这一部分可以带你快速了解iOS 6的新功能。
  · (更新)第1章“全新的系统”。iOS 6增加了大量新功能,在这里你将快速了解它们。
  · (更新)第2章“熟悉Xcode 4与LLVM编译器”。Xocde是一个庞大的IDE,很多功能并不显而易见。无论你是新手还是上一版的读者,这一章都会帮助你了解它强大(也有令人沮丧)的工具。
  第二部分:熟能生巧
  作为一名iOS开发人员,你应该掌握很多常用工具,比如表视图通知和动画图层。不过要想发挥它们的全部潜力,就要熟悉它们。在这一部分,我们将学到Cocoa开发的最佳实践。
  · 第3章“Objective-C基础知识”。如果你想在Objective-C开发方面更上一层楼,这一章将引导你学习一些改善应用设计、稳定性和可重用性的常用工具。
  · 第4章“Cocoa设计模式”。Cocoa建立于大量常用的设计模式之上。这一章会介绍相关的设计模式和苹果用它们来解决问题的思路。
  · (新增)第5章“通过Objective-C的ARC管理内存”。自动引用计数根本改变了iOS开发者的工作方式。大部分转换也很容易,移植代码时可能会出现一些微妙的问题。本章讨论如何避开问题和充分利用这个强大的技术。
  · 第6章“熟练使用表视图”。表视图可能是iOS中最复杂但也最常用的UI元素了。它们的设计非常简单优雅,但不了解原理却很难用好。这一章将为你讲清楚如何正确使用它们,以及如何解决无限滚动等问题。
  · (新增)第7章“集合视图与自动布局”。WWDC 2012中展示的UICollectionView令世人瞩目。到目前为止,UITableView仍然垄断着iOS应用的界面。不过当开发人员慢慢习惯新控件后,这个局面很可能在iOS 6时代被改变。加上OS X中基于约束(constraint-base)的布局,实现复杂而美观的界面突然变得简单起来。这一章的内容就是这些。
  · 第8章“绘图功能”。很多新开发者都对自定义绘图退避三舍,但它却是快速创建美观用户界面的关键。这一章将探究UIKit和Core Graphics中有关绘图的功能,告诉大家怎么才能做到既快且美。
  · 第9章“Core Animation”。iOS设备对动画的支持是无与伦比的。借助强大的GPU和高度优化的Core Animation,你可以创建直观又吸引人的界面。在这一章中,我们会介绍一些基础知识以及动画的原理。
  · 第10章“错误处理”。你总想写出完美的代码,不过每每又事与愿违。如何应对意外是优秀应用与一般应用的分水岭。这一章会告诉你常用的错误处理技巧、如何记录错误,以及如何让代码在出错时表现得更加灵活。
  · (新增)第11章“位置服务”。许多应用都需要知道用户在什么地方。iOS使一切变得简单,但也要警惕不要把电量耗尽。这一章我们讲一讲如何平衡功能与效率,同时给予用户最佳体验。
  第三部分:选择工具
  有些工具几乎时刻都要用,而有些工具则只有特定的时候才有用。在这一部分中,你会学到这些较为特殊的工具以及相关的技术。
  · (新增)第12章“表视图常用UI范例”。与集合视图一样令人欲罢不能的是表视图,它一直是iOS开发的中坚力量。这一章介绍如何使用高级表视图的无限滚动视图和其他高级主题。
  · (更新)第13章“多任务”。多任务是许多应用程序的重要部分,这一章将介绍如何在应用程序运行时或在后台时执行多任务。iOS 6新的状态保留系统使这一切更加容易,这一章还会介绍一些常见用例。
  · (更新)第14章“REST解惑”。基于REST的服务是现代应用程序的核心,这一章将教会你在iOS中最好地实现它们。
  · (更新)第15章“通过安全服务巩固系统安全”。用户安全和保护隐私永远是第一位的。这一章会介绍如何通过钥匙串、证书和密码保护应用和用户数据不会被盗用。
  · 第16章“在多个苹果平台和苹果设备上运行应用”。iOS家族人丁兴旺,不仅有了iPod touch、iPhone、iPad、Apple TV,而且新机型仍会不断涌现。目前还无法一次编写随处运行。为了保证应用在任何平台上都表现卓越,本章将讨论如何基于硬件和平台调整应用。
  · 第17章“国际化和本地化”。虽然你现在可能只想关注某个国家的市场,但让应用明天能够顺利走向世界也只需做一点点工作。本章会告诉你如何不影响当前开发,又能减少未来的麻烦和成本。
  · 第18章“通过应用内购买提高销售业绩”。应用内购买对于很多程序员来说仍然是陌生领域。用户喜欢额外内容,而开发人员喜欢额外收入。这一章告诉你在应用中把这一功能变为现实的最佳方法。
  · (新增)第19章“调试”。要是每个应用第一次就能完美运行该有多好。幸运的是,Xcode和LLDB提供了很多能帮助你抓住“狡猾”bug的工具。你会学到很多高级的内容,了解实际开发中如何处理错误。
  · (全新)第20章“性能调优”。高性能可以让应用脱颖而出。优化CPU和内存性能非常重要,不过你也需要优化电池以及网络使用。苹果公司提供了Instruments这个强大的工具来解决这些问题。你会学到如何使用Instruments查找瓶颈,以及如何在找到问题后改善性能。
  第四部分:超越极限
  这一部分是全书最精彩的内容。你已经学到了基础知识,掌握了基本技能,现在该使用高级工具来超越极限了。这一部分将带你深入了解iOS。
  · (新增)第21章“故事板及自定义切换效果”。故事板仍然会使一些熟悉Nib文件的开发人员感到费解。你在这里将会学到如何使用故事板来提升应用。
  · 第22章“Cocoa的大招:键值编码和观察”。苹果的许多强大框架都是依靠KVO(Key-Value Observing)来维护性能和灵活性的。你会学到如何利用灵活性和KVO的速度。
  · 第23章“不同凡响:块和函数式编程”。许多开发人员依然对Objective-C的块感到好奇。块可以用来与苹果框架交互,不过也开启了编程新思路。接受一种新风格,并在你的下一个工程中将它的优势表现出来吧。
  · 第24章“离线支持”。网络编程很困难,不过更难的是支持无缝离线功能。学习如何最佳地缓存数据并将其集成到你的网络引擎上是这一章的重点。
  · (新增)第25章“云端数据”。开发人员依然在适应新的iCloud服务。支持的话可以快速让你的应用程序引入注目。本章中你将学习这个强大的系统。
  · (更新)第26章“精妙的文本布局”。从UIKit到Core Text,iOS为显示文本提供了充足的功能。iOS又在UIKit中添加了富文本支持。在这一章,你会学到如何使用属性化字符串、Web视图,以及用Core Text来处理最棘手的布局问题。
  · 第27章“创建Core Foundation应用”。说到iOS中最强大的框架,你能想到的Core框架可能会有Core Graphics、Core Animation、Core Text,但它们都是基于Core Foundation框架的。在这一章中,我们学习如何使用Core Foundation数据类型,以便充分利用iOS提供的功能。
  · 第28章“深度解析Objective-C”。这一章致力于揭开Objective-C背后的秘密,包括如何使用Ojective-C运行时直接动态地修改类和方法、如何通过Objective-C函数调用C方法,以及如何通过系统来扩展程序。
  以上各章可以跳读,除了需要Core Foundation数据对象(特别是Core Graphics、Core Animation和Core Text)的几章,其他章都是相互独立的。关于Core Foundation的内容,最终会归总到第27章“创建Core Foundation应用”。
  阅读条件
  本书所有示例都是用Mac OS X 10.8上的Xcode 4.5以及iOS 6开发的。你需要一个苹果开发人员账户来访问大部分工具和文档,并且需要一个开发人员许可证来运行iOS设备上的应用程序。对此,请参考并注册账号。
  本书中大部分示例可以在Xcode 4.5的iOS模拟器中运行。使用iOS模拟器就不需要苹果开发人员许可证了。
  苹果文档
  苹果公司在自己的网站上和Xcode中提供了大量文档。这些文档的URL地址变动很频繁而且非常长。本书会使用标题而不是URL来引用这些文档。如果想在Xcode中寻找文档,请按下Cmd-Option-·快捷键或点击Help->Docuentation and API Reference。在Documentation Organizer窗口中点击搜索图标,输入文档的标题,并从搜索结果中选择文档。可以参考图1中搜索Coding Guidelines for Cocoa的示例。
  图1 搜索Coding Guidelines for Cocoa
  如果想在苹果官方网站查找文档,可以访问http://developer.apple.com,点击Member Center,并登录。选择iOS Dev Center,并在搜索框中输入文档的标题。
  在线文档与Xcode文档是相同的。你可能会接收到iOS和Mac两个平台的结果,请阅读iOS版。很多iOS文档是Mac版的副本并且偶尔会包含iOS不支持的函数调用或常量。本书会告诉你哪些功能在iOS上可用。
  源代码
  在学习本书示例的时候,可以手工输入代码,也可以使用本书附带的源代码文件。本书所有的源代码可以在网站上下载得到。 下载之后,在第26章文件夹SimpleLayout工程的CoreTextLabel.m文件中可以看到如下代码:
  CoreTextLabel.m(SimpleLayout)
  - (id)initWithFrame:(CGRect)frame {
  if ((self = [super initWithFrame:frame])) {
  CGAffineTransform
  transform = CGAffineTransformMakeScale(1, -1);
  CGAffineTransformTranslate(transform,
  0, -self.bounds.size.height);
  self.transform = transform;
  self.backgroundColor = [UIColor whiteColor];
  }
  return self;
  }
  本书中有些代码片段并不完整,其目的只是为了辅助上下文说明问题。要想查看完整代码,就需要参考下载到的源代码。
  勘误
  虽然我们已经尽了最大努力,但错误在所难免。有些是输入错误,有些可能是我们理解上有偏差,有些可能是因为内容有变化。为了确保代码与时俱进,请参考网站上的最新版本,以及博客中的相关文章。
  致谢
  在去年投入大量时间撰写针对iOS 5的本书上一版之后,今年又着手撰写针对iOS 6的这个新版本,对此Rob非常感谢自己家人的耐心。Mugunth感谢父母和朋友的支持。感谢Wiley出版社,尤是Craig Smith和Ellie Scott,在他们不懈的支持、鼓励下本书才得以问世。感谢Jay Thrash热心的技术审校,还有Tom Dinse对文字的润色。感谢WWDC的苹果工程师们容忍我们无穷无尽的疑问、追寻,还有偶尔的抱怨。特别感谢史蒂夫·乔布斯,他毕生致力于改变世界。人们不会忘记他。    
				
 
				
				
					深入理解 Swift:构建高性能、优雅的 iOS 应用  本书并非一本关于特定 iOS 版本(如 iOS 6)的入门指南,也非罗列零散技术点的集合。相反,它是一次对 iOS 软件开发核心理念与高级实践的深度探索,旨在帮助开发者构建出真正高性能、高可靠性、同时又不失优雅的现代 iOS 应用。我们将超越基础的 API 调用,深入探究 Swift 语言的强大之处,以及如何利用它们来解决复杂问题,优化用户体验,并确保应用的长期可维护性。  一、 Swift 语言的深层魅力与实践  Swift 语言自诞生以来,凭借其安全性、速度和现代化的语法,迅速成为 iOS 开发的首选。然而,很多开发者对其潜力的挖掘仅仅停留在表面。本书将带领你深入 Swift 的核心,重新审视那些你可能已经熟悉但未曾深究的特性,并展示如何在实际项目中高效地运用它们。     值类型与引用类型的精妙之处: Swift 强制区分值类型(如 struct, enum)和引用类型(如 class),这在内存管理和数据传递方面带来了显著优势。我们将详细解析它们在性能上的差异,以及何时选择哪种类型能带来最佳效果。例如,在处理大量数据时,合理使用 `struct` 可以避免不必要的引用计数开销;而在需要共享状态时,`class` 则显得更为得体。我们会通过实际案例,演示如何在数据结构设计、参数传递等方面做出明智的选择,以优化内存使用和执行效率。     协议导向编程(Protocol-Oriented Programming, POP)的强大力量: POP 是 Swift 的基石之一,它提供了比传统的面向对象继承更加灵活和强大的抽象能力。本书将全面讲解协议的定义、协议的继承、以及关联类型(associatedtypes)等高级特性。我们将深入探讨如何利用协议来解耦代码、实现组合优于继承的设计模式,并构建出高度可复用和易于测试的组件。你会学到如何设计清晰的协议接口,如何利用协议扩展(protocol extensions)提供默认实现,从而大幅减少代码冗余,并使代码更加易于维护和演进。     高级错误处理与 `throws`、`try`、`catch` 的精通: Swift 内置的错误处理机制能够帮助我们编写更健壮的代码,避免运行时崩溃。我们将不仅仅停留在简单的 `do-catch` 结构,而是深入分析错误类型的设计、错误传播的策略、以及如何在不同层级之间有效地处理错误。你会了解到如何自定义错误类型,如何将系统错误转化为业务逻辑能够理解的错误,以及如何在异步操作中妥善处理错误。     泛型(Generics)的灵活运用: 泛型允许我们编写既强大又灵活的代码,能够处理多种数据类型,而无需重复编写相似的代码。我们将探讨泛型的基础,包括泛型函数和泛型类型,并重点关注如何利用泛型来构建通用的数据结构、算法以及网络请求等框架。通过实际的泛型应用场景,你会体会到泛型如何提升代码的类型安全性、可读性和可维护性。     Swift Concurrency(异步编程模型): 现代 iOS 应用离不开异步操作,以确保用户界面的流畅响应。Swift Concurrency 提供了 `async/await` 语法糖,极大地简化了异步编程的复杂性。本书将深入讲解 `async/await` 的工作原理、任务(Tasks)的管理、以及如何使用 `Actor` 来安全地管理共享状态,防止数据竞争。我们会通过实际的 I/O 操作(如网络请求、文件读写)和并发处理场景,演示如何构建高效、无死锁的异步代码。  二、 架构设计与模式的深度解析  一个优秀的 iOS 应用,离不开清晰、可扩展的架构。本书将引导你深入理解各种流行的架构模式,并根据实际项目需求进行选择和组合。     MVC、MVVM、VIPER 等主流架构模式的比较与应用: 我们不会止步于对这些模式的简单介绍,而是会深入剖析它们的优缺点,以及在不同场景下的适用性。我们将通过大型项目的实际案例,演示如何将这些模式有效地应用到代码中,并强调在实际开发中如何根据项目规模和团队协作方式灵活调整。     组件化与模块化开发的实践: 随着应用功能的不断增加,将应用拆分成独立的、可复用的模块变得至关重要。本书将探讨组件化开发的策略,包括如何定义清晰的模块接口,如何管理模块间的依赖关系,以及如何使用 CocoaPods、Carthage 或 Swift Package Manager 等工具来构建和集成模块。你将学会如何设计独立的组件,以提升开发效率、简化维护,并支持团队的并行开发。     设计模式在 iOS 开发中的落地: 除了通用的设计模式,如单例模式(Singleton)、工厂模式(Factory)等,本书还将重点关注那些在 iOS 开发中尤为实用的模式,例如观察者模式(Observer)、策略模式(Strategy)、装饰器模式(Decorator)等。我们将通过具体的代码示例,展示如何在 UIKit 和 SwiftUI 中有效地应用这些模式,以解决常见的开发难题。  三、 性能优化与内存管理的艺术  性能是衡量一个应用质量的重要指标。本书将带你深入了解 iOS 平台的性能特点,并掌握一系列实用的优化技巧。     深入理解内存管理:Automatic Reference Counting (ARC) 的幕后: 虽然 ARC 已经极大地简化了内存管理,但理解其工作原理对于防止内存泄漏和循环引用至关重要。我们将深入分析 ARC 的工作机制,如何识别和解决循环引用问题,以及如何利用 `weak` 和 `unowned` 引用来管理对象的生命周期。     Instruments 的精通与性能瓶颈的定位: Instruments 是 Xcode 内置的强大性能分析工具。本书将详细介绍如何使用 Instruments 的各种工具(如 Time Profiler、Allocations、Leaks)来检测应用的性能瓶颈,包括 CPU 使用率、内存占用、网络流量等。你将学会如何根据 Instruments 的报告来定位和解决性能问题。     UI 渲染优化与列表性能的提升: 在绘制复杂 UI 和处理大量数据列表时,性能优化尤为关键。我们将探讨如何优化视图的绘制流程,如何使用 Cell 复用机制(如 UITableView、UICollectionView)来提升列表性能,以及如何利用 `CALayer` 和 Core Animation 来实现更平滑的动画效果。     网络请求的性能优化: 高效的网络请求是保证应用响应速度的重要环节。我们将讲解如何优化网络请求的参数,如何使用缓存来减少不必要的请求,以及如何设计高效的数据解析方案。  四、 用户体验的打磨与高级特性  除了功能实现,卓越的用户体验是赢得用户的关键。本书将涵盖一些能够显著提升用户体验的高级特性和设计理念。     响应式编程(Reactive Programming)的引入: RxSwift 等响应式编程框架能够帮助我们以声明式的方式处理复杂的数据流和事件,从而编写出更加简洁、易于理解的代码。我们将介绍响应式编程的核心概念,以及如何在 iOS 应用中运用它来管理用户交互、网络请求和数据更新。     动画与过渡效果的精妙运用: 恰到好处的动画能够提升应用的流畅度和视觉吸引力。我们将深入讲解 Core Animation 的高级特性,以及如何利用 UIKit Dynamics 和 SwiftUI 的动画 API 来创建出富有表现力的动画效果。     可访问性(Accessibility)的设计与实现: 为所有用户提供无障碍的使用体验是现代应用的基本要求。我们将讲解如何利用 VoiceOver、Dynamic Type 等可访问性特性来让应用更具包容性,并满足相关设计规范。  五、 测试与持续集成  高质量的应用离不开完善的测试策略和高效的开发流程。     单元测试、集成测试与 UI 测试的编写: 我们将深入讲解如何使用 XCTest 框架编写各种类型的测试,以确保代码的正确性和稳定性。通过实际的测试案例,你将学会如何编写可维护、高效的测试代码。     持续集成/持续部署(CI/CD)的实践: CI/CD 能够帮助我们自动化构建、测试和部署流程,极大地提升开发效率和代码质量。我们将探讨如何使用 Jenkins、GitHub Actions 等工具来搭建 CI/CD 流水线,以实现更快的迭代和更可靠的版本发布。  总结  本书的目标是为你提供一套系统性的知识体系,让你能够从根本上提升 iOS 应用的开发水平。我们不仅仅关注“做什么”,更侧重于“为什么这么做”,以及“如何做得更好”。通过深入的理论讲解、丰富的代码示例和实际项目案例,你将能够掌握构建高质量、高性能、易于维护的 iOS 应用所需的全部技能,并为迎接未来 iOS 技术的发展做好充分准备。这本书将是你在 iOS 开发旅程中不可或缺的强大助力。