第1篇 认识Objective-C与iPhone开发 1
第1章 Objective-C、iOS、iPhone和乔布斯 1
1.1 认识Objective-C 1
1.1.1 发展历程及变化 1
1.1.2 语言性能与分析 2
1.2 iOS简介 3
1.2.1 iOS的发展历程 3
1.2.2 iOS的设计和功能特性 4
1.3 iOS架构 5
1.3.1 Cocoa Touch层 6
1.3.2 Media(媒体)层 8
1.3.3 Core Services层 11
1.3.4 Core OS层 13
1.4 iPhone简介 14
1.4.1 iPhone发展历程 14
1.4.2 iPhone功能 16
1.4.3 iPhone特色 16
1.4.4 iPhone市场行情 18
1.5 iOS开发者工具 18
1.5.1 Xcode 18
1.5.2 Interface Builder 20
1.5.3 Instruments 21
1.5.4 Shark 22
1.6 乔布斯简介 22
1.6.1 早年 22
1.6.2 创建苹果公司及发展 22
1.6.3 回归苹果及改革 23
1.6.4 个人成就 23
第2章 搭建Objective-C应用开发环境 24
2.1 基于Windows平台搭建开发环境 24
2.1.1 前期准备 24
2.1.2 安装虚拟机VMware 25
2.1.3 安装Mac OS 27
2.1.4 设置Windows和MAC共享目录 30
2.1.5 安装iPhone SDK 31
2.1.6 启动Xcode 32
2.2 进一步认识Objective-C 32
2.2.1 类接口(@Interface) 32
2.2.2 类实现(@Implementation) 33
2.2.3 创建类对象 34
2.3 Xcode的命令行工具 34
2.3.1 使用Xcode的命令行工具 34
2.3.2 输入和输出函数 37
2.3.3 指令符(@) 38
2.4 进一步认识Xcode 39
2.4.1 工程定义信息 40
2.4.2 源文件引用 42
2.4.3 目标的处理 43
2.4.4 执行环境 45
第3章 创建你的第一个iPhone应用程序 46
3.1 示例实现目标 46
3.2 应用概念概述 46
3.2.1 设计模式 47
3.2.2 委托 47
3.2.3 模型-视图-控制器模式 48
3.2.4 目标-动作 50
3.3 教你如何创建工程 50
3.3.1 使用Xcode 51
3.3.2 应用程序引导 52
3.4 如何添加一个视图控制器 54
3.4.1 添加一个视图控制器类 54
3.4.2 添加一个视图控制器属性 55
3.4.3 创建视图控制器实例 56
3.4.4 如何建立视图 57
3.4.5 内务处理做些什么 57
3.4.6 实现源码列表 57
3.4.7 测试你的应用程序 58
3.5 查看nib文件 58
3.5.1 使用Interface Builder 58
3.5.2 nib文件包含些什么 59
3.5.3 文件的拥有者 59
3.5.4 如何使用视图插座变量 60
3.5.5 如何加载nib文件 61
3.5.6 测试应用程序 61
3.6 如何配置视图 62
3.6.1 添加用户接口元素 62
3.6.2 视图控制器接口声明 64
3.6.3 教你如何制定关联 65
3.6.4 测试 67
3.7 如何实现视图控制器 67
3.7.1 视图控制器中的属性 67
3.7.2 changeGreeting:方法 68
3.7.3 文本字段的委托 68
3.8 如何解决编译遇到的疑难 69
3.8.1 代码和编译器警告 69
3.8.2 检查nib文件中的关联 69
3.8.3 委托方法的名称 69
3.9 下一步做什么 70
3.9.1 用户接口 70
3.9.2 编程创建用户接口元素 70
3.9.3 如何把程序安装到设备 71
3.9.4 额外的功能 71
第2篇 Objective-C的一点基础 72
第4章 Objective-C的一点基础——数据类型和运算符 72
4.1 基本数据类型 72
4.1.1 整型 72
4.1.2 实型 75
4.1.3 字符型 78
4.1.4 字符串 80
4.1.5 枚举类型 80
4.2 其他常用类型 81
4.2.1 id类型 81
4.2.2 布尔值(BOOL) 83
4.2.3 typedef 85
4.2.4 nil和Nil 87
4.2.5 SEL类型 87
4.3 指针和数组 89
4.3.1 数据和内存 89
4.3.2 指针 90
4.3.3 数组 94
4.3.4 数组和指针的关系 98
4.4 表达式和运算符 101
4.4.1 Objective-C运算符 102
4.4.2 表达式和运算优先级 102
4.4.3 算术运算符 102
4.4.4 算术表达式 103
4.4.5 赋值运算符 104
4.4.6 关系运算符 105
4.4.7 逻辑运算符 105
4.4.8 增减运算符 106
4.4.9 强制类型转换运算符 107
4.4.10 位运算符 108
第5章 Objective-C的一点基础——程序控制语句 112
5.1 条件语句 112
5.1.1 逻辑运算符 112
5.1.2 if语句 112
5.1.3 switch语句 115
5.1.4 条件运算符 117
5.2 循环结构 118
5.2.1 for语句 118
5.2.2 while语句 120
5.2.3 do-while语句 120
5.2.4 嵌套语句 121
5.3 跳转语句 122
5.3.1 break语句 122
5.3.2 continue语句 122
5.3.3 return语句 122
5.4 编译预处理 123
5.4.1 宏定义(#define) 124
5.4.2 运算符 125
5.4.3 #import语句 126
5.4.4 条件编译 127
5.5 几个常用特性 128
5.5.1 关联引用 128
5.5.2 快速枚举 130
5.5.3 选择器 131
5.5.4 静态类型的使用 133
第6章 Objective-C的一点基础——算法 137
6.1 认识算法 137
6.1.1 什么是算法 138
6.1.2 算法有哪些特性 138
6.2 算法的表达方式 139
6.2.1 用自然语言表达算法 139
6.2.2 用流程图表达算法 139
6.2.3 用N-S流程图表达算法 141
6.2.4 用伪代码表达算法 142
6.2.5 用计算机语言表达算法 143
6.3 排序 144
6.3.1 简单排序 144
6.3.2 高级排序 149
6.3.3 其他排序 151
6.4 递归算法 153
6.4.1 认识递归算法 153
6.4.2 递归算法的简单应用 155
第3篇 充实你的Objective-C知识 156
第7章 充实你的Objective-C知识——类 156
7.1 认识根类 156
7.1.1 NSObject简介 156
7.1.2 根类和协议 157
7.1.3 根类方法 157
7.1.4 根类接口规范 159
7.1.5 根类实例方法和类方法 159
7.2 如何设计类 159
7.2.1 设计接口(@interface) 160
7.2.2 设计实现(@implementation) 162
7.3 变量的种类 163
7.3.1 何为局部变量 164
7.3.2 何为全局变量 164
7.3.3 何为实例变量 164
7.3.4 何为静态(static)变量 167
7.3.5 变量的存储类别 168
7.4 认识属性 169
7.4.1 如何声明属性(@property) 169
7.4.2 声明属性的特性 170
7.4.3 如何实现属性(@synthesize) 171
7.4.4 属性类型和相关函数 173
7.4.5 认识属性的类型编码 173
7.4.6 如何实现属性重声明 174
7.4.7 如何修改父类的属性 174
7.4.8 新旧版本属性运行时的区别 175
7.5 探究方法 175
7.6 继承 176
7.6.1 如何继承父类的实例变量 177
7.6.2 如何继承父类的方法 177
7.6.3 如何重写(override)方法 178
7.6.4 如何重载(overload)方法 179
7.6.5 何时进行方法的重载 181
7.6.6 何时使用子类 183
7.6.7 类别(Categories)和延伸(Extensions) 184
7.7 异常处理 187
7.7.1 如何启用异常处理 187
7.7.2 异常处理方式 188
7.7.3 如何捕捉不同类型的异常 188
7.7.4 如何抛出异常 189
7.8 如何使用类名 189
7.9 类怎样进行比较 190
7.10 类类型 190
7.10.1 如何指定静态类型 190
7.10.2 类型的自查处理机制 191
第8章 充实你的Objective-C知识——消息和协议 192
8.1 消息 192
8.1.1 认识消息语法 192
8.1.2 如何向nil发送消息 193
8.1.3 接收实例变量 194
8.1.4 如何获得方法地址 194
8.1.5 了解objc_msgSend函数 195
8.1.6 如何使用隐藏的参数 196
8.1.7 消息转发处理的机制 197
8.1.8 消息转发和多重继承 198
8.1.9 何为消息代理对象 199
8.1.10 消息转发和类继承 199
8.1.11 认识多态性 200
8.1.12 如何实现动态绑定 201
8.1.13 解析动态方法 201
8.1.14 如何使用动态加载 202
8.1.15 “.”语法格式 202
8.2 协议 205
8.2.1 何为预定义接口 205
8.2.2 如何使用预定义方法 206
8.2.3 为匿名对象声明接口 206
8.2.4 非层级关系的相似(Nonhierarchical Similarities) 207
8.2.5 何为正式协议 207
8.2.6 何为非正式协议 208
8.2.7 何为协议对象 209
8.2.8 如何采用一个协议 209
8.2.9 如何服从一个协议 210
8.2.10 类型校验处理机制 210
8.2.11 如何协议嵌套协议 211
8.2.12 引用其他协议 211
第9章 充实你的Objective-C知识——对象 213
9.1 如何创建对象 213
9.1.1 对象分配处理的机制 213
9.1.2 对象初始化 214
9.1.3 使用dealloc方法 219
9.1.4 何为类工厂方法 220
9.2 对象动态类型 221
9.3 探究对象的可变性 221
9.3.1 什么时候用可变或不可变对象 221
9.3.2 使用可变对象编程 222
9.4 对象间如何实现通信 225
9.4.1 面向对象程序中的通信有哪些 225
9.4.2 IBoutlet变量如何实现通信 226
9.4.3 委托和数据源 227
9.4.4 可视化通信形式——目标-动作机制 230
9.4.5 特定通信形式——绑定 234
9.4.6 特定通信形式——通告 236
9.4.7 委托、观察者和目标的所有权 241
9.5 对象的生命周期 242
9.6 对象的所有权和销毁 245
9.6.1 对象所有权策略有哪些 245
9.6.2 保留计数的处理机制 246
9.6.3 何时使用自动释放 246
9.6.4 共享对象的有效性 248
9.6.5 如何使用存取方法 248
9.6.6 如何回收对象 249
9.6.7 通过引用返回的对象 250
9.6.8 保留循环的处理机制 250
9.6.9 何为对象的弱引用 251
9.6.10 如何有效地进行资源管理 251
第10章 充实你的Objective-C知识——基础(Foundation)框架 253
10.1 Foundation框架结构 253
10.2 与Core Foundation框架的区别 256
10.3 如何引用及查询Foundation框架信息 256
10.4 数字类型 259
10.4.1 数字类型类(NSNumber) 259
10.4.2 int、NSInteger、NSUInteger和NSNumber的区别及联系 260
10.5 字符串类型 260
10.5.1 不可变字符串类(NSString) 261
10.5.2 可变字符串类(NSMutableString) 263
10.6 数组类型 265
10.6.1 不可变数组类(NSArray) 265
10.6.2 可变数组类(NSMutableArray) 266
10.6.3 多维数组 268
10.7 字典(Dictionary)类型 271
10.7.1 不可变字典类(NSDictionary) 272
10.7.2 可变字典类(NSMutableDictionary) 272
10.8 日期(Date)类型 273
10.8.1 日期类型类(NSDate) 274
10.8.2 NSCalendar和NSDateComponents 276
10.8.3 应用日期类型类 278
第4篇 提高你的Objective-C知识 280
第11章 提高你的Objective-C知识——内存管理 280
11.1 内存管理规则 280
11.2 基本的内存管理 281
11.2.1 普及内存管理基础知识 281
11.2.2 几个简单的内存管理应用 282
11.2.3 何为存取方法 282
11.2.4 如何应用存取方法 284
11.2.5 致使内存管理混乱的因素 287
11.3 何为自动释放池 288
11.3.1 非Application Kit程序中的自动释放池 289
11.3.2 自动释放池和线程 290
11.3.3 作用域和嵌套自动释放池的关系 290
11.3.4 何为所有权策略 291
11.3.5 如何实现垃圾回收 291
11.4 内存中复制的处理机制 292
11.4.1 使用深复制还是浅复制 292
11.4.2 何时使用alloc和init方式 293
11.4.3 何时使用NSCopyObject 294
11.4.4 如何实现可变和不可变对象的复制 295
11.5 nib对象的内存管理 296
11.5.1 插座(IBoulet)实现的内存管理机制 296
11.5.2 iNib文件实现的内存管理机制 296
第12章 提高你的Objective-C知识——文件和数据管理 298
12.1 文件访问的指导原则 298
12.2 文件的管理 298
12.2.1 iPhone常用目录 299
12.2.2 程序目录路径的获取 299
12.2.3 更新过程中的文件保存 300
12.2.4 文件的备份和恢复 301
12.3 数据的读/写 301
12.3.1 文件数据的读/写 301
12.3.2 属性列表数据的读/写 302
12.3.3 用归档器对数据进行读/写 303
12.3.4 将数据写到Documents目录 303
12.3.5 从Documents目录对数据进行读取 304
12.4 文件保存处理机制 304
12.5 SQLite 3 305
12.5.1 数据类型 306
12.5.2 常用函数及返回编码 306
12.5.3 数据库的创建、打开和关闭 309
12.5.4 表的创建 310
12.5.5 数据操作语句(insert、update和delete) 310
12.5.6 数据库查询(select) 311
第13章 提高你的Objective-C知识——UIKit常用类及应用 313
13.1 分类 313
13.2 显示视图 314
13.2.1 标签(Label) 314
13.2.2 图片视图(ImageView) 315
13.2.3 进度条视图(ProgressView) 316
13.2.4 ActivityIndicatorView 317
13.3 控件 317
13.3.1 按钮(Button) 318
13.3.2 文本框(TextField) 320
13.3.3 滑块(Slider) 322
13.3.4 切换开关(Switch) 323
13.4 导航视图 323
13.4.1 导航栏(NavigationBar) 323
13.4.2 标签栏(TabBar) 326
13.5 警告视图和动作表单 327
13.5.1 警告视图(AlertView) 327
13.5.2 动作表单(ActionSheet) 329
13.6 文本和Web视图 331
13.6.1 文本视图(TextView) 331
13.6.2 Web视图(WebView) 332
13.7 容器 332
13.7.1 表格视图(TableView) 333
13.7.2 滚动视图(ScrollView) 337
13.7.3 工具栏(ToolBar) 340
13.8 其他常用类型 341
13.8.1 分页控件(PageContro1) 341
13.8.2 搜索栏(SearchBar) 342
第5篇 应用你的Objective-C知识 347
第14章 应用你的Objective-C知识——开发基于iPhone的弹球游戏 347
14.1 认识Cocos2D 347
14.2 如何安装Cocos2D-iPhone 348
14.3 整体框架和启动流程 349
14.3.1 项目框架 349
14.3.2 启动流程 350
14.4 技术点 353
14.4.1 何为游戏引擎 353
14.4.2 认识节点(Node) 355
14.4.3 认识场景(Scene) 356
14.4.4 认识层(Layer) 357
14.4.5 认识标签(Label) 358
14.4.6 认识动作(Action) 359
14.4.7 认识导演(Director) 360
14.4.8 精灵(Sprite) 360
14.4.9 刚体 361
14.4.10 Box2D 361
14.4.11 Box2D与Chipmunk的差异性 362
14.5 项目的设计和实现 362
14.5.1 游戏实现什么目标 362
14.5.2 项目的先期需要准备什么 363
14.5.3 AppDelegate类的设计和实现 363
14.5.4 场景和层的设计与实现 363
14.5.5 tick方法的完善 367
14.5.6 如何设计球拍(Paddle) 367
14.5.7 球反弹的优化处理 371
14.5.8 使用碰撞检测的意义 371
14.5.9 为什么添加块(Block) 374
14.5.10 给游戏添加音乐 376
14.5.11 添加游戏胜利条件 376
14.5.12 如何添加结束场景 376
14.5.13 游戏有待完善之处 379
第15章 应用你的Objective-C知识——开发基于iPad的精灵小书柜 380
15.1 系统的总体设计方案 380
15.1.1 系统组成描述 380
15.1.2 系统模块间的关系 380
15.2 技术点 381
15.2.1 视图(UIView)动画 381
15.2.2 UIScrollView、UITableView和UITableViewCell 383
15.2.3 UITextView、UIToolbar和UIBarButtonItem 385
15.3 项目框架和启动流程 386
15.3.1 项目框架 387
15.3.2 启动流程 388
15.4 项目的设计和实现 389
15.4.1 如何组装成小书柜 389
15.4.2 书和报刊如何在小书柜上展示 392
15.4.3 如何实现多面书柜的组成 394
15.4.4 书和报刊的模板展示设计 394
15.4.5 如何实现书和报刊封面与内容关联 397
15.4.6 如何实现动感的向下翻页效果 400
15.4.7 如何实现动感的向上翻页效果 401
15.4.8 如何实现手势识别处理 402
15.4.9 如何返回小书柜界面 402
15.4.10 系统有待完善之处 402