编辑推荐
2009年第1版面世以来,累计销量超过5万册
全球iOS开发者交口称赞的iOS开发圣经,新版本经过重新翻译审校
资深技术专家担纲撰写, iOS开发必备
相关产品请点击:
内容简介
还在iPhone和iPad应用开发的大门前徘徊?还是已经投身iOS应用开发阵营,但希望迅速提升自己的功力?选择本书绝对能令你惊喜连连。四位作者均是资深移动开发专家,具有丰富的Mac、iOS、Cocoa及Objective-C开发经验。作者将多年的实战经验与智慧感悟汇集成本书,旨在帮助没有经验的读者顺利叩开iOS应用开发的大门,帮助有经验的读者迅速提升功力,从而在iOS开发的道路上所向披靡。
《精通iOS开发》自问世以来就受到读者的交口赞誉,被奉为学习iOS平台开发的选择。中文版累计销量已超过5万册。新版针对iOS 6和新的SDK做了大幅修订,力求使新老读者都能有大收获。作者重写了所有项目代码,使之兼容新旧SDK,还专门新增一章介绍iOS 6的新特性集合视图,并对原有的各章内容进行更新,从而反映出技术的发展动态。
还等什么?立即展卷阅读,加入iOS开发的行列吧!
内页插图
精彩书评
“这本书简直太棒了!这是我买过的性价高的一本书。作者非常清楚地解释了做出每种选择的原因以及每个iOS组件的特性,从而教你一种思维方式,而不是简单地完成每项任务。”
——读者评论
目录
第1章 欢迎来到iOS世界
1.1 关于本书
1.2 必要条件
1.2.1 开发者选项
1.2.2 必备知识
1.3 编写iOS应用程序有何不同
1.3.1 只能激活一个应用
1.3.2 只有一个窗口
1.3.3 有限的访问权限
1.3.4 有限的响应时间
1.3.5 有限的屏幕大小
1.3.6 有限的系统资源
1.3.7 不支持垃圾回收
1.3.8 新功能
1.3.9 与众不同的交互方法
1.4 本书内容
1.5 这一版的新内容
1.6 准备开始吧
第2章 创建项目
2.1 在Xcode中创建项目
2.1.1 Xcode工作区窗口
2.1.2 深入研究项目
2.2 Interface Builder简介
2.2.1 nib文件的构成
2.2.2 库
2.2.3 在视图中添加标签
2.2.4 属性修改
2.3 画龙点睛--美化iPhone应用
2.4 小结
第3章 实现基本交互
3.1 MVC方法
3.2 创建项目
3.3 视图控制器
3.3.1 输出口和动作
3.3.2 清理视图控制器
3.3.3 设计用户界面
3.3.4 运行应用
3.3.5 样式文本
3.4 应用程序委托
3.5 小结
第4章 更丰富的用户界面
4.1 满是控件的屏幕
4.2 活动控件、静态控件和被动控件
4.3 创建应用程序
4.4 实现图像视图和文本字段
4.4.1 添加图像视图
4.4.2 调整图像视图的大小
4.4.3 设置视图属性
4.4.4 添加文本字段
4.4.5 创建和关联输出口
4.5 关闭键盘
4.5.1 输入完成后关闭键盘
4.5.2 通过触摸背景关闭键盘
4.5.3 添加滑块和标签
4.5.4 添加顶部约束
4.5.5 创建并关联动作方法和输出口
4.5.6 实现动作方法
4.6 实现开关、按钮和分段控件
4.7 实现分段控件的动作方法
4.8 实现操作表单和警告视图
4.8.1 遵从操作表单委托方法
4.8.2 显示操作表单
4.9 美化按钮
4.9.1 viewDidLoad方法
4.9.2 控件状态
4.9.3 可拉伸图像
4.10 小结
第5章 自动旋转和自动调整大小
5.1 自动旋转机制
5.1.1 点、像素和Retina显示屏
5.1.2 自动旋转的实现方式
5.2 选择视图支持的方向
5.2.1 应用级支持的方向
5.2.2 单个控制器的旋转支持
5.3 使用约束设计界面
5.3.1 覆盖默认的约束
5.3.2 与屏幕等宽的按钮
5.4 旋转时重构视图
5.4.1 创建并关联输出口
5.4.2 旋转时移动按钮
5.5 切换视图
5.5.1 设计两个视图
5.5.2 实现视图切换
5.5.3 修改输出口集合
5.6 小结
第6章 多视图应用程序
6.1 多视图应用程序的常见类型
6.2 多视图应用程序的体系结构
6.2.1 根控制器
6.2.2 内容视图剖析
6.3 UINavigationController
6.3.1 创建视图控制器和nib文件
6.3.2 修改应用程序委托
6.3.3 修改BIDSwitchView- Controller.h
6.3.4 添加视图控制器
6.3.5 构建带有工具栏的视图
6.3.6 编写根视图控制器
6.3.7 实现内容视图
6.3.8 转换过程的动画效果
6.4 小结
第7章 标签栏与选取器
7.1 Pickers应用程序
7.2 委托和数据源
7.3 建立标签栏框架
7.3.1 创建文件
7.3.2 添加根视图控制器
7.3.3 创建TabBarController.xib
7.3.4 初次运行
7.4 实现日期选取器
7.5 实现单组件选取器
7.5.1 声明输出口和动作方法
7.5.2 构建视图
7.5.3 将控制器实现为数据源和委托
7.6 实现多组件选取器
7.6.1 声明输出口和动作方法
7.6.2 构建视图
7.6.3 实现控制器
7.7 实现依赖组件
7.8 使用自定义选取器创建一个简单游戏
7.8.1 编写控制器头文件
7.8.2 构建视图
7.8.3 添加图像资源
7.8.4 实现控制器
7.8.5 最后的细节
7.8.6 链接Audio Toolbox框架
7.9 小结
第8章 表视图简介
8.1 表视图基础
8.1.1 表视图和表视图单元
8.1.2 分组表和无格式表
8.2 实现一个简单表
8.2.1 设计视图
8.2.2 编写控制器
8.2.3 添加一个图像
8.2.4 表视图单元样式
8.2.5 设置缩进级别
8.2.6 处理行的选择
8.2.7 更改字体大小和行高
8.3 定制表视图单元
8.3.1 向表视图单元添加子视图
8.3.2 创建UITableViewCell子类
8.3.3 从nib文件加载UITableViewCell
8.4 分组分区和索引分区
8.4.1 构建视图
8.4.2 导入数据
8.4.3 实现控制器
8.4.4 添加索引
8.5 实现搜索栏
8.6 小结
第9章 导航控制器和表视图
9.1 导航控制器
9.1.1 栈的性质
9.1.2 控制器栈
9.2 由6个部分组成的分层应用程序:Nav
9.2.1 子控制器
9.2.2 Nav应用程序骨架
9.2.3 向项目中添加图像
9.2.4 第一个子控制器:展开按钮视图
9.2.5 第二个子控制器:检查表
9.2.6 第三个子控制器:表行上的控件
9.2.7 第四个子控制器:可移动的行
9.2.8 第五个子控制器:可删除的行
9.2.9 第六个子控制器:可编辑的详细面板
9.2.10 其他内容
9.3 小结
第10章 故事板
10.1 创建一个简单的故事板
10.2 动态原型单元
10.2.1 使用故事板的动态表内容
10.2.2 编辑原型单元
10.2.3 实现表视图数据源
10.2.4 它会加载吗
10.3 静态单元
10.3.1 实现静态单元
10.3.2 实现表视图数据源
10.4 联线
10.4.1 创建联线导航
10.4.2 设计故事板
10.4.3 第一个视图转换
10.4.4 更为实用的任务列表
10.4.5 查看任务详情
10.4.6 设置更多联线
10.4.7 从列表中传递任务
10.4.8 处理任务细节
10.4.9 回传详细信息
10.4.10 让列表获取详细信息
10.4.11 小结
第11章 iPad开发注意事项
11.1 分割视图和浮动窗口
11.1.1 创建SplitView项目
11.1.2 在故事板中定义结构
11.1.3 使用代码定义功能
11.2 显示总统信息
11.3 创建浮动窗口
11.4 小结
第12章 应用程序设置及用户默认设置
12.1 设置捆绑包入门
12.2 AppSettings应用程序
12.2.1 创建项目
12.2.2 使用设置捆绑包
12.2.3 读取应用程序中的设置
12.2.4 在应用程序中修改默认设置
12.2.5 注册默认值
12.2.6 保证设置有效
12.3 小结
第13章 数据持久化基础知识
13.1 应用程序的沙盒
13.1.1 获取Documents目录
13.1.2 获取tmp目录
13.2 文件保存策略
13.2.1 单文件持久化
13.2.2 多文件持久化
13.3 属性列表
13.3.1 属性列表序列化
13.3.2 Persistence应用程序的第一个版本
13.4 对模型对象进行归档
13.4.1 遵循NSCoding协议
13.4.2 实现NSCopying协议
13.4.3 对数据对象进行归档和取消归档
13.4.4 归档应用程序
13.5 使用iOS内嵌的SQLite3
13.5.1 创建或打开数据库
13.5.2 绑定变量
13.5.3 SQLite3应用程序
13.6 使用Core Data
13.6.1 实体和托管对象
13.6.2 Core Data应用程序
13.7 小结
第14章 iCloud之旅
14.1 使用UIDocument管理文档存储
14.1.1 构建TinyPix
14.1.2 创建BIDTinyPix-Document类
14.1.3 主代码
14.1.4 初始故事板
14.1.5 创建BIDTinyPixView类
14.1.6 设计详细视图
14.2 添加iCloud支持
14.2.1 创建provisioning profile
14.2.2 启用iCloud授权
14.2.3 如何查询
14.2.4 保存在哪里
14.2.5 将首选项保存到iCloud
14.3 小结
第15章 Grand Central Dispatch和后台处理
15.1 Grand Central Dispatch
15.2 SlowWorker简介
15.3 线程基础知识
15.4 工作单元
15.5 GCD:低级队列
15.5.1 傻瓜式操作
15.5.2 改进SlowWorker
15.6 后台处理
15.6.1 应用程序生命周期
15.6.2 状态更改通知
15.6.3 创建State Lab项目
15.6.4 执行状态的变化
15.6.5 利用执行状态更改
15.6.6 处理不活动状态
15.6.7 处理后台状态
15.7 小结
第16章 使用Quartz和OpenGL绘图
16.1 图形世界的两个视图
16.2 Quartz 2D绘图方法
16.2.1 Quartz 2D的图形上下文
16.2.2 坐标系
16.2.3 指定颜色
16.2.4 在上下文中绘制图像
16.2.5 绘制形状:多边形、直线和曲线
16.2.6 Quartz 2D工具采样器:模式、梯度、虚线模式
16.3 QuartzFun应用程序
16.3.1 建立QuartzFun应用程序
16.3.2 添加Quartz 2D的绘图代码
16.3.3 优化QuartzFun应用程序
16.4 GLFun应用程序
16.4.1 建立GLFun应用程序
16.4.2 创建BIDGLFunView类
16.4.3 更新BIDView-Controller类
16.4.4 更新nib文件
16.4.5 完成GLFun应用程序
16.5 小结
第17章 轻击、触摸和手势
17.1 多点触控术语
17.2 响应者链
17.2.1 响应事件
17.2.2 转发事件:保持响应者链的活动状态
17.3 多点触控体系结构
17.4 4个手势通知方法
17.5 TouchExplorer应用程序
17.6 Swipes应用程序
17.6.1 自动手势识别
17.6.2 实现多指滑动
17.7 检测多次轻击
17.8 检测捏合和旋转
17.9 自定义手势
17.9.1 CheckPlease应用程序
17.9.2 CheckPlease的触摸方法
17.10 小结
第18章 Core Location和Map Kit
18.1 位置管理器
18.1.1 设置精度
18.1.2 设置距离筛选器
18.1.3 启动位置管理器
18.1.4 合理使用位置管理器
18.2 位置管理器委托
18.2.1 获取位置更新
18.2.2 使用CLLocation获取纬度和经度
18.2.3 错误通知
18.3 试用Core Location
18.4 将移动路线展现在地图上
18.5 小结
第19章 陀螺仪和加速计
19.1 加速计物理学
19.2 不要忘记旋转
19.3 Core Motion和动作管理器
19.3.1 基于事件的动作
19.3.2 主动动作访问
19.3.3 加速计结果
19.4 检测摇动
19.4.1 内嵌的摇动检测
19.4.2 摇动与击碎
19.5 将加速计用做方向控制器
19.5.1 滚弹珠程序
19.5.2 实现BIDBallView类
19.5.3 计算弹珠运动
19.6 小结
第20章 照相机和照片库
20.1 图像选取器和UIImagePicker-
Controller
20.2 实现图像选取器控制器委托
20.3 实际测试照相机和照片库
20.3.1 设计界面
20.3.2 实现照相机视图控制器
20.4 小结
第21章 集合视图
21.1 创建DialogViewer项目
21.2 视图控制器类
21.3 自定义单元
21.4 配置视图控制器
21.5 内容单元
21.6 实现流式布局
21.7 分区标题视图
21.8 小结
第22章 应用程序本地化
22.1 本地化体系结构
22.2 字符串文件
22.2.1 字符串文件
22.2.2 本地化的字符串宏
22.3 现实中的iOS:本地化应用程序
22.3.1 创建LocalizeMe
22.3.2 测试LocalizeMe
22.3.3 本地化nib文件
22.3.4 本地化图像
22.3.5 生成并本地化字符串文件
22.3.6 Base Internationalization
22.3.7 应用显示名称的本地化
22.4 小结
附录A 未来之路
精彩书摘
8.1.1 表视图和表视图单元
表视图是用于显示表数据的视图对象,它是UITableview类的一个实例。表中的每个可见行都由UITableViewcell类实现。因此,表视图是用于显示表中可见部分的对象,表视图单元则负责显示表中的一行(参见图8—2)。
表视图并不负责存储表中的数据。它们只存储足够绘制当前可见行的数据。表视图从遵循UITableViewDelegate协议的对象获取配置数据,从遵循UITableViewDataSource协议的对象获得行数据。本章稍后讲解示例程序时你可以了解到这些工作原理。
前面提到,所有表都只有1列。但是,图8—1右边的Clock应用程序,从外观看确实至少拥有2列,如果把时钟图标也算进去,会发现其实是3列。不过情况并非如此。表中的每一行都由一个UITableViewCell表示。每个UITableViewCell对象都可以包含图像、文本,还有一个可选的附加图标(最右边的小图标,下一章会详细介绍附加图标)。
如果需要的话,可以向IITableVieWCell添加子视图,从而在一个单元中放置更多的数据。可以通过两种基本方法来完成此操作。一种方法是创建单元时在程序中添加子视图,另一种方法是从nib文件中加载它们。你可以按照喜欢的方式展示表视图单元,也可以添加想要的子视图。这样看来,单列限制并不像开始听起来那样可怕。如果你觉得听晕了,别担心,本章稍后将介绍这方面的技术。
8.1.2分组表和无格式表
表视图有以下两种基本样式。
前言/序言
探索Swift与Objective-C的奥秘,构建引人入胜的iOS应用 这本书并非一本速成指南,而是为你铺设一条通往iOS应用开发精通之路的基石。它将带领你深入了解iOS开发的核心,从基础概念到高级技巧,赋予你独立思考和解决复杂问题的能力。无论你是初次接触编程,还是已有其他平台开发经验,本书都将为你提供一条清晰、系统且富有深度的学习路径。 第一部分:iOS开发的基石——Swift语言与Xcode集成开发环境 本书的开篇,我们将一起踏上Swift语言的学习之旅。Swift作为Apple官方推出的现代化、强大且易于上手的编程语言,已经成为iOS开发的首选。你将掌握Swift的基础语法,包括变量、常量、数据类型、运算符,以及如何构建控制流语句(如条件语句和循环)。我们将深入探讨Swift的面向对象特性,理解类、结构体、枚举、属性和方法。更重要的是,你将学习如何利用Swift的协议(Protocols)和扩展(Extensions)来编写更具灵活性和可重用性的代码,以及如何运用泛型(Generics)来编写能够处理多种数据类型的通用代码。 除了Swift语言本身,Xcode作为Apple强大的集成开发环境(IDE),是iOS开发不可或缺的工具。本书将详细介绍Xcode的工作流程,包括项目创建、文件管理、代码编辑、界面设计以及调试技巧。你将熟悉Xcode的用户界面,学会如何有效地使用Interface Builder来拖拽和配置UI元素,如何使用Storyboard来组织应用的界面流程,以及如何使用Auto Layout来创建能够适应不同屏幕尺寸和方向的自适应布局。我们将一步步指导你完成从零开始创建第一个iOS应用的整个过程,让你快速熟悉开发环境。 第二部分:构建用户界面——从UI Kit到自定义控件 一个出色的iOS应用,离不开精心设计的用户界面。本部分将带你全面掌握iOS UI Kit框架,这是构建所有iOS应用界面的核心。你将深入了解各种基础UI控件,如 `UILabel`(文本标签)、`UITextField`(文本输入框)、`UIButton`(按钮)、`UIImageView`(图像视图)以及 `UITableView`(表格视图)和 `UICollectionView`(集合视图)等数据展示控件。我们将详细讲解如何使用这些控件来创建丰富多样的用户交互,并深入理解它们的属性、方法和事件处理机制。 你将学习如何使用Auto Layout来精确控制UI元素在不同屏幕尺寸和方向下的布局,确保你的应用在各种设备上都能呈现出良好的视觉效果。我们将探讨如何通过代码动态创建和管理UI元素,以及如何响应用户的触摸事件,实现丰富的交互功能。 更进一步,本书将引导你学习如何创建自定义的UI控件。通过继承现有的UI控件或从零开始构建 `UIView` 的子类,你可以创造出独一无二的视觉元素,满足你应用的特定设计需求。我们将分享创建可复用UI组件的模式和最佳实践,让你能够更高效地构建复杂的界面。 第三部分:数据管理与持久化——让你的应用数据持久可靠 一个功能完整的应用,需要能够有效地管理和存储数据。本部分将为你揭示iOS平台上各种强大的数据管理和持久化技术。你将学习如何使用 `UserDefaults` 来存储简单的用户偏好设置,这是一个快速访问用户应用设置的简便方法。 对于结构化数据,我们将深入讲解 `Core Data` 框架。Core Data是Apple提供的一个强大的对象图管理和持久化框架,它能够帮助你以面向对象的方式来管理应用程序的数据模型,并在SQLite数据库或其他持久化存储中进行高效的存储和检索。你将学习如何定义数据模型(Entity)、创建属性、建立实体之间的关系,以及如何使用 `NSManagedObjectContext` 来进行数据的增删改查操作。我们将提供具体的代码示例,帮助你理解Core Data的实际应用。 此外,你还将了解 `FileManager`,用于直接操作文件系统,管理应用程序沙盒内的文件。对于网络数据的处理,我们将介绍如何使用 `Codable` 协议,这是Swift中一种非常高效且易于使用的JSON和属性列表序列化/反序列化机制,让你能够轻松地将网络返回的数据转换为Swift对象,以及将Swift对象转换为可发送的网络数据。 第四部分:网络通信与API集成——连接世界,获取信息 现代iOS应用往往需要与网络进行通信,获取实时数据,或者与后端服务进行交互。本部分将带你掌握iOS网络通信的核心技术。你将学习如何使用 `URLSession`,这是Apple提供的强大的网络请求框架。我们将详细介绍如何发起HTTP请求,包括GET、POST等常用方法,如何处理请求参数,以及如何解析服务器返回的响应数据,通常以JSON格式为主。 你将深入理解异步编程模型,掌握如何使用Completion Handlers和Swift的 `async/await` 语法来处理耗时的网络操作,避免阻塞主线程,保证应用的流畅运行。本书还将介绍如何处理网络错误,以及如何实现更高级的网络功能,如文件上传和下载。 此外,我们还将探讨如何集成第三方API,让你能够利用现有的网络服务,例如社交媒体分享、地图服务、支付接口等,来丰富你的应用功能。 第五部分:并发与性能优化——让你的应用飞速运转 随着应用功能的日益复杂,性能和响应能力变得至关重要。本部分将为你揭示iOS开发中的并发编程模型和性能优化策略。你将学习 `Grand Central Dispatch (GCD)`,这是Apple提供的并发编程框架,能够让你方便地管理多线程任务,提高应用的响应速度。我们将讲解串行队列、并行队列、主队列等概念,以及如何使用GCD来执行后台任务,避免UI阻塞。 你还将学习 `OperationQueue`,这是GCD的一种更高级的抽象,允许你对任务进行更精细的控制,例如任务的依赖关系、取消和状态管理。 除了并发,本书还将探讨各种性能优化技巧。你将学习如何使用Instruments工具来分析应用的性能瓶颈,找出CPU、内存和网络使用方面的不足。我们将讨论如何优化UI渲染,减少内存占用,以及如何高效地处理大型数据集。通过这些技巧,你的应用将能够更流畅、更高效地运行。 第六部分:高级主题与实战应用——迈向专业开发者之路 在掌握了基础和核心技术之后,本书将带你深入探索iOS开发的更高级主题,并结合实际项目来巩固所学知识。你将学习如何实现应用内购买(In-App Purchase),让你的应用能够提供付费内容或订阅服务。 我们将探讨如何集成推送通知(Push Notifications),让你的应用能够主动向用户发送消息,提升用户参与度。你还将学习如何处理用户的位置信息,并集成地图服务,构建具有地理位置感知功能的应用。 安全是iOS开发中不可忽视的重要方面。本书将介绍一些基本的安全实践,例如如何安全地存储敏感数据,如何保护用户隐私,以及如何防止常见的安全漏洞。 最后,我们将通过一个或多个贯穿全书的实战项目,将前面所学的知识融会贯通。你将有机会亲手构建一个功能完整的iOS应用,从需求分析、设计、编码到测试和发布,全面体验iOS开发的完整生命周期。这些项目将涵盖之前学习的各项技术,让你在实践中加深理解,并培养解决实际开发问题的能力。 本书的独特之处: 深入的原理讲解: 我们不仅仅停留在“如何做”,更侧重于“为什么这样做”,帮助你理解iOS开发背后的原理和设计思想。 实用的代码示例: 书中提供的代码示例经过精心设计,清晰易懂,并可以直接用于你的项目中。 循序渐进的学习路径: 从基础到高级,内容组织合理,确保每个学习阶段都能扎实掌握。 培养独立解决问题的能力: 通过引导性的讲解和实战项目,鼓励你主动思考和探索,成为一个独立的问题解决者。 通过阅读这本书,你将不再是被动地模仿代码,而是真正理解iOS开发的精髓,具备独立设计、开发和优化iOS应用的能力,从而在竞争激烈的移动开发领域脱颖而出,成为一名真正“精通”iOS开发的开发者。