第1章 什么是Cocoa 1
1.1历史简介 1
1.2开发工具 3
1.3编程语言 3
1.4对象、类、方法和消息 4
1.5框架 4
1.6如何阅读本书 5
1.7约定 5
1.8常见错误 6
1.9如何学习 6
第2章 起步 7
2.1 Xcode 7
2.1.1新建项目 7
2.1.2 main函数 10
2.2 Interface Builder 10
2.2.1 utility区 11
2.2.2空白窗口 11
2.2.3页面布局 12
2.2.4 dock 14
2.2.5创建一个类 14
2.2.6创建一个实例 16
2.2.7创建连接 16
2.3回顾Objective-C 18
2.3.1 Objective-C中的类型和常量 19
2.3.2查看头文件 19
2.3.3编辑实现文件 20
2.3.4编译和运行 21
2.3.5 awakeFromNib 22
2.4文档 23
2.5你做了什么 24
2.6应用程序运行过程 24
第3章Objective-C 26
3.1创建和使用实例 26
3.2使用已有的类 27
3.2.1给nil发送消息 31
3.2.2 NSObject、NSArray、NSMutableArray和NSString 32
3.2.3组合和继承 35
3.3创建自己的类 36
3.3.1创建LotteryEntry类 36
3.3.2更改 main.m文件 38
3.3.3实现Description方法 39
3.3.4编写初始化器initializer 41
3.3.5带参数的初始化器 42
3.4调试器 43
3.5你做了什么 47
3.6静态分析器 47
3.7补充知识:消息机制工作原理 48
3.8挑战 49
第4章 内存管理 50
4.1手动内存管理 51
4.1.1创建没有内存泄漏的彩票程序 52
4.1.2 dealloc函数 54
4.1.3自动释放对象 54
4.1.4 retain计数规则 56
4.2 Accessor方法 57
4.3使用ARC 60
4.3.1强引用 60
4.3.2弱引用 60
4.3.3ARC补充知识 61
第5章Target/Action 62
5.1一些NSControl子类的常见用法 64
5.1.1 NSButton 64
5.1.2 NSSlider 65
5.1.3 NSTextField 65
5.2开始SpeakLine示例 67
5.3 XIB文件中的布局设置 68
5.4实现SpeakLineAppDelegate类 71
5.5补充:通过代码设置 72
5.6挑战 72
5.7调试建议 73
第6章Helper对象 75
6.1委托 75
6.2 NSTableView及其dataSource 79
6.3用户界面布局 81
6.4建立连接 83
6.5编辑SpeakLineAppDelegate.m文件 83
6.5.1在实现委托时的常见错误 85
6.5.2对象委托 85
6.6补充知识:委托是怎样工作的 86
6.7挑战1:创建委托 87
6.8挑战2:创建一个数据源 87
第7章 键一值编码和键一值观察 88
7.1键-值编码 88
7.2绑定 89
7.3键-值观察KVO 91
7.4使对象的键可观察 91
7.5 Properties 93
7.6补充知识1:键路径 95
7.7补充知识2:键-值观察 96
第8章NSArrayController 97
8.1从RaiseMan应用开始 98
8.2键-值编码和nil 105
8.3添加排序功能 106
8.4补充知识:不使用NSArrayController进行排序 107
8.5挑战1 107
8.6挑战2 107
第9章NSUndoManager 110
9.1 NSInvocation 110
9.2 NSUndoManager的工作机制 110
9.3为RaiseMan添加撤销功能 112
9.4键-值观察 115
9.5撤销编辑操作 116
9.6插入后立即编辑 118
9.7补充知识:窗口和undo管理器 120
第10章Archiving 121
10.1 NSCoder和NSCoding 122
10.1.1编码 122
10.1.2解码 123
10.2文档架构 124
10.2.1 Info.plist和NSDocumentController 124
10.2.2 NSDocument 125
10.2.3 NSWindowController 127
10.3保存和NSKeyedArchiver 127
10.4载入和NSKeyedUnarchiver 127
10.5为文件类型设置扩展名和图标 129
10.6补充知识1:避免死循环 131
10.7补充知识2:创建Protocol 131
10.8补充知识3:自动保存文档 132
10.9补充知识4:没有undo功能的基于文档的应用程序 133
10.10统一类型标识符 133
第11章Core Data基本原理 134
11.1 NSManagedObjectModel 134
11.2 Interface 136
11.2.1基于视图的表格视图 137
11.2.2连接和绑定 140
11.2.3 Core Data如何工作 145
11.3补充知识:基于视图和基于单元格的表格视图比较 146
11.4挑战 147
第12章NIB文件和NSWindowController 148
12.1 NSPanel 148
12.2向应用程序添加面板 149
12.2.1设置菜单项 150
12.2.2 AppController.m 151
12.2.3 Preferences.xib 152
12.2.4 PreferenceController…m 155
12.3补充知识:NSBundle 157
12.4挑战 157
第13章User Defaults 158
13.1 NSDictionary和NSMutableDictionary 159
13.1.1 NSDictionary 159
13.1.2 NSMutableDictionary 160
13.2 NSUserDefaults 160
13.3设置Defaults 161
13.3.1设置程序标识符 161
13.3.2为defaults的名字建立键 161
13.3.3注册defaults 162
13.4让用户编辑Defaults 163
13.5使用Defaults 164
13.5.1禁用自动创建未命名新文档 164
13.5.2设置表格视图的背景色 165
13.6补充知识1:NSUserDefaultsController 166
13.7补充知识2:从命令行读写Defaults 166
13.8挑战 167
第14章 使用Notifications 168
14.1 Notifications是什么 168
14.2 Notifications不是什么 168
14.3 NSNotification 169
14.4 NSNotificationCenter 169
14.5发布notification 171
14.6注册成为观察者 171
14.7当notification到达时怎么处理 172
14.8 userInfo字典 172
14.9补充知识:Delegates和Notifications 173
14.10挑战 173
第15章 使用告警窗口 174
15.1让用户确认删除 175
15.2挑战 177
第16章 本地化 178
16.1本地化NIB文件 179
16.2字符串表 181
16.2.1创建字符串表 181
16.2.2使用字符串表 182
16.3补充知识1:ibtool 183
16.4补充知识2:格式化字符串中符号的顺序 184
第17章 自定义视图 185
17.1视图层次 185
17.2绘制视图 186
17.2.1创建视图子类的实例 187
17.2.2 Size Inspector 188
17.2.3 drawRect 189
17.3使用NSBezierPath绘图 191
17.4 NSScrollView 192
17.5用程序创建视图 195
17.6补充知识1:单元格 195
17.7补充知识2:isFlipped 196
17.8挑战 197
第18章 图片和鼠标事件 198
18.1 NSResponder 198
18.2 NSEvent 198
18.3捕获鼠标事件 199
18.4使用NSOpenPanel 200
18.4.1修改XIB文件 201
18.4.2代码编辑 203
18.5在视图中合成图片 204
18.6视图的坐标系统 206
18.7 Autoscrolling 208
18.8补充知识:NSImage 208
18.9挑战 209
第19章 键盘事件 210
19.1 NSResponder 211
19.2 NSEvent 212
19.3使用自定义视图创建一个新的工程 212
19.3.1界面布局 212
19.3.2创建连接 214
19.3.3编写代码 216
19.4补充知识:Rollovers 219
19.5毛边蓝框 220
第20章 绘制带属性的文本 222
20.1 NSFont 222
20.2 NSAttributedString 223
20.3绘制字符串和属性字符串 225
20.4显示字母 225
20.5让视图生成PDF数据 226
20.6补充知识:NSFontManager 228
20.7挑战1 229
20.8挑战2 229
第21章 粘贴板和Nil-Targeted Actions 230
21.1 NSPasteboard 231
21.2在BigLetterView中添加剪切、复制和粘贴功能 232
21.3 Nil-Targeted Actions 233
21.4补充知识1:哪个对象发送了action消息 235
21.5补充知识2: UTI和剪贴板 236
21.6补充知识3:延迟复制技术 236
21.7挑战1 237
21.8挑战2 237
第22章Categories 238
22.1在NSString中添加方法 238
22.2补充知识:声明私有方法 240
第23章 拖放 241
23.1设置BigLetterView为拖动作的源 241
23.1.1开始拖操作 242
23.1.2释放以后 244
23.2设置BigLetterView为拖操作的目的 244
23.2.1 registerForDraggedTypes: 245
23.2.2添加高亮效果 245
23.2.3实现拖操作目的方法 246
23.2.4添加第二个的BigLetterView对象 247
23.3补充知识:Operation Mask 247
第24章NSTimer 248
24.1界面布局 250
24.2建立连接 251
24.3为TutorController添加代码 253
24.4补充知识:NSRunLoop 255
24.5挑战 255
第25章 工作表 256
25.1添加sheet窗口 256
25.1.1添加outlet和action 257
25.1.2界面布局 258
25.1.3添加代码 261
25.2补充知识1:contextInfo 261
25.3补充知识2:模式化窗口 262
第26章 创建NSFormatters 263
26.1简单的格式化器类 264
26.1.1创建ColorFormatter.h 265
26.1.2编辑XIB文件 265
26.1.3 NSColorList 267
26.1.4在字符串中搜索子串 267
26.1.5实现基本的格式化器方法 267
26.2 NSControl类的Delegate 269
26.3检查部分字符串 270
26.4返回属性字符串的格式化器 272
26.5补充知识:NSValueTransformer 272
第27章 打印 273
27.1处理页面设置 273
27.2补充知识:是在屏幕上绘图吗 277
27.3挑战 277
第28章Web Service 278
28.1 RanchForecast项目 279
28.1.1 NSURLConnection 280
28.1.2在ScheduleFetcher中添加XML解析功能 281
28.1.3界面布局 284
28.1.4编写控制器代码 285
28.2打开URL 286
28.3挑战:添加一个WebView 286
第29章Blocks 288
29.1块语法 290
29.1.1块内部的内存和对象操作 291
29.1.2块的可用性 292
29.1.3 RanchForecast:异步开发 292
29.1.4接收异步响应 293
29.2挑战:实现一个Delegate 296
第30章iOS开发 297
30.1将RanchForecast移植到iOS 297
30.2 RootViewController 299
30.3添加导航控制器 302
30.4 ScheduleViewController 303
30.5 UITableViewController 304
30.6视图控制器切换 305
30.7挑战 306
第31章 视图切换 307
31.1开始 308
31.1.1创建管理视图控制器类 309
31.1.2创建视图控制器及其XIB文件 309
31.2给MyDocument添加视图切换功能 311
31.3调整窗口尺寸 312
第32章Core Data Relationships 314
32.1模型编辑 314
32.2创建自定义NSManagedObj ect类 315
32.2.1 Employee 316
32.2.2 Department 317
32.3界面布局 318
32.4事件及nextResponder 320
第33章Core Animation 322
33.1 Scattered 322
33.2隐式动画及action 327
33.3挑战1 329
33.4挑战2 329
第34章 并发性 330
34.1多线程 330
34.1.1巨大的分歧 331
34.1.2简单的Cocoa后台线程 332
34.2 Scattered升级版:Instruments中的Time Profiling 333
34.3 NSOperationQueue 336
34.3.1 Scattered的多线程解决方案 336
34.3.2线程的同步处理 338
34.4补充知识:更快的Scattered程序 338
34.5挑战 339
第35章Cocoa和OpenGL 340
35.1一个简单的Cocoa/OpenGL应用程序 340
35.2界面布局 341
35.3代码编写 344
第36章N STask 347
36.1 ZIPspector 347
36.1.1同步读取 351
36.1.2 iPing 352
36.2挑战:.tar和.tgz文件 355
第37章 发布应用 356
37.1 Build Configurations 356
37.2创建Release版本 358
37.3应用沙箱 360
37.3.1权限 360
37.3.2文件访问与权限的折中 361
37.4苹果应用商店 362
结束语 364