苹果开发之Cocoa编程(原书第4版)

苹果开发之Cocoa编程(原书第4版)
作 者: 希莱加斯 普雷布尔 黄敏 郝刚
出版社: 机械工业出版社
丛编项: 华章程序员书库
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: Oracle
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Aaron Hillegass,资深苹果应用开发工程师、培训讲师和技术作家,在使用Cocoa进行开发方面拥有15年工作经验,具有非常高的知名度和非常大的影响力。曾就职于NeXT和Apple公司,目前在Big Nerd Ranch主讲Cocoa编程,第一套OpenStep(Cocoa的前身)教程便出自他和本书另一位作者之手。他还写过多本关于Cocoa、Objective-C、iPhone和iOS方面的图书。 Adam Preble,Mac和iOS软件程序开发顾问、资深苹果应用开发工程师、培训讲师和技术作家,在使用Cocoa、Objective-C以及C/C++进行开发方面拥有多年工作经验,尤其在应用程序用户体验方面有独到的见解。目前在Big Nerd Ranch开发Mac和iOS应用,也是Cocoa编程的主讲教师。

内容简介

《苹果开发之Cocoa编程(原书第4版)》是在Aaron多年教学经验的基础上进行了总结提炼的精华之作,加之前面3版不断推敲和完善,已经成为学习Cocoa编程的入门级经典书籍。本书系统介绍了Objective-C语言、Cocoa主要的设计模式、必要的开发工具Xcode和Instruments等,同时新引入了ARC、blocks、view-based table views和Mac应用商店,并专门开辟一章用于介绍在iOS上的基础开发。相比于之前的版本,本书在Cocoa框架新特性、新技术的基础上,更加侧重实战,也更加结合应用发展的最新趋势。《苹果开发之Cocoa编程(原书第4版)》以具体的实例贯穿,引导读者通过实践学习Cocoa框架的基本思想。在本书中,读者不仅能够看到技术细节,更能看到不断剖析、层层递进的解决问题的思路,甚至可以看到如何查找资料、获取帮助的方法,帮助读者建立规范、科学的设计开发习惯。阅读本书不要求读者拥有任何的Mac编程经验,只需要了解基本的C语言,以及面向对象的知识即可。相信《苹果开发之Cocoa编程(原书第4版)》能够推动苹果中文社区的进一步发展、壮大,也希望能够将Objective-C和Cocoa框架以及苹果产品背后一流的技术实力从细微处展现出来,帮助那些致力于创新、变革以及追求完美的人们。

图书目录

译者序

前 言

致 谢

第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.3 ARC补充知识 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 创建自定义NSManagedObject类 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章 NSTask 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