新書推薦:
《
算法经济 : 商业逻辑与人类生活的智能演进(生动呈现AI与算法的创新应用与商业价值)
》
售價:NT$
359.0
《
家书中的百年史
》
售價:NT$
359.0
《
偏爱月亮
》
售價:NT$
207.0
《
生物安全与环境
》
售價:NT$
255.0
《
泥土:文明的侵蚀(城市与生态文明丛书)
》
售價:NT$
380.0
《
医用化学(第三版)
》
售價:NT$
259.0
《
别怕,试一试
》
售價:NT$
307.0
《
人才基因(凝聚30年人才培育经验与智慧)
》
售價:NT$
468.0
編輯推薦:
iv
经典畅销书全新升级,全面且深入地讲解了Cocoa编程的各项知识,被誉为Mac OS
X编程图书领域的标杆,是从零开始系统学习Cocoa编程的首选!
內容簡介:
本书是在Aaron多年教学经验的基础上进行了总结提炼的精华之作,加之前面3版不断推敲和完善,已经成为学习Cocoa编程的入门级经典书籍。本书系统介绍了Objective-C语言、Cocoa主要的设计模式、必要的开发工具Xcode和Instruments等,同时新引入了ARC、blocks、view-based
table
views和Mac应用商店,并专门开辟一章用于介绍在iOS上的基础开发。相比于之前的版本,本书在Cocoa框架新特性、新技术的基础上,更加侧重实战,也更加结合应用发展的最新趋势。全书以具体的实例贯穿,引导读者通过实践学习Cocoa框架的基本思想。在本书中,读者不仅能够看到技术细节,更能看到不断剖析、层层递进的解决问题的思路,甚至可以看到如何查找资料、获取帮助的方法,帮助读者建立规范、科学的设计开发习惯。阅读本书不要求读者拥有任何的Mac编程经验,只需要了解基本的C语言,以及面向对象的知识即可。相信本书能够推动苹果中文社区的进一步发展、壮大,也希望能够将Objective-C和Cocoa框架以及苹果产品背后一流的技术实力从细微处展现出来,帮助那些致力于创新、变革以及追求完美的人们。
關於作者:
Aaron
Hillegass,资深苹果应用开发工程师、培训讲师和技术作家,在使用Cocoa进行开发方面拥有15年工作经验,具有非常高的知名度和非常大的影响力。曾就职于NeXT和Apple公司,目前在Big
Nerd
Ranch主讲Cocoa编程,第一套OpenStep(Cocoa的前身)教程便出自他和本书另一位作者之手。他还写过多本关于Cocoa、Objective-C、iPhone和iOS方面的图书。
Adam
Preble,Mac和iOS软件程序开发顾问、资深苹果应用开发工程师、培训讲师和技术作家,在使用Cocoa、Objective-C以及CC++进行开发方面拥有多年工作经验,尤其在应用程序用户体验方面有独到的见解。目前在Big
Nerd Ranch开发Mac和iOS应用,也是Cocoa编程的主讲教师。
目錄 :
译者序
前 言
致 谢
第1章 什么是Cocoa
1.1 历史简介
1.2 开发工具
1.3 编程语言
1.4 对象、类、方法和消息
1.5 框架
1.6 如何阅读本书
1.7 约定
1.8 常见错误
1.9 如何学习
第2章 起步
2.1 Xcode
2.1.1 新建项目
2.1.2 main函数
2.2 Interface Builder
2.2.1 utility区
2.2.2 空白窗口
2.2.3 页面布局
2.2.4 dock
2.2.5 创建一个类
2.2.6 创建一个实例
2.2.7 创建连接
2.3 回顾Objective-C
2.3.1 Objective-C中的类型和常量
2.3.2 查看头文件
2.3.3 编辑实现文件
2.3.4 编译和运行
2.3.5 awakeFromNib
2.4 文档
2.5 你做了什么
2.6 应用程序运行过程
第3章 Objective-C
3.1 创建和使用实例
3.2 使用已有的类
3.2.1 给nil发送消息
3.2.2 NSObject、NSArray、NSMutableArray和NSString
3.2.3 组合和继承
3.3 创建自己的类
3.3.1 创建LotteryEntry类
3.3.2 更改main.m文件
3.3.3 实现Description方法
3.3.4 编写初始化器initializer
3.3.5 带参数的初始化器
3.4 调试器
3.5 你做了什么
3.6 静态分析器
3.7 补充知识:消息机制工作原理
3.8 挑战
第4章 内存管理
4.1 手动内存管理
4.1.1 创建没有内存泄漏的彩票程序
4.1.2 dealloc函数
4.1.3 自动释放对象
4.1.4 retain计数规则
4.2 Accessor方法
4.3 使用ARC
4.3.1 强引用
4.3.2 弱引用
4.3.3 ARC补充知识
第5章 TargetAction
5.1 一些NSControl子类的常见用法
5.1.1 NSButton
5.1.2 NSSlider
5.1.3 NSTextField
5.2 开始SpeakLine示例
5.3 XIB文件中的布局设置
5.4 实现SpeakLineAppDelegate类
5.5 补充:通过代码设置
5.6 挑战
5.7 调试建议
第6章 Helper对象
6.1 委托
6.2 NSTableView及其dataSource
6.3 用户界面布局
6.4 建立连接
6.5 编辑SpeakLineAppDelegate.m文件
6.5.1 在实现委托时的常见错误
6.5.2 对象委托
6.6 补充知识:委托是怎样工作的
6.7 挑战1:创建委托
6.8 挑战2:创建一个数据源
第7章 键-值编码和键-值观察
7.1 键-值编码
7.2 绑定
7.3 键-值观察KVO
7.4 使对象的键可观察
7.5 Properties
7.6 补充知识1:键路径
7.7 补充知识2:键-值观察
第8章 NSArrayController
8.1 从RaiseMan应用开始
8.2 键-值编码和nil
8.3 添加排序功能
8.4 补充知识:不使用NSArrayController进行排序
8.5 挑战1
8.6 挑战2
第9章 NSUndoManager
9.1 NSInvocation
9.2 NSUndoManager的工作机制
9.3 为RaiseMan添加撤销功能
9.4 键-值观察
9.5 撤销编辑操作
9.6 插入后立即编辑
9.7 补充知识:窗口和undo管理器
第10章 Archiving
10.1 NSCoder和NSCoding
10.1.1 编码
10.1.2 解码
10.2 文档架构
10.2.1 Info.plist和NSDocumentController
10.2.2 NSDocument
10.2.3 NSWindowController
10.3 保存和NSKeyedArchiver
10.4 载入和NSKeyedUnarchiver
10.5 为文件类型设置扩展名和图标
10.6 补充知识1:避免死循环
10.7 补充知识2:创建Protocol
10.8 补充知识3:自动保存文档
10.9 补充知识4:没有undo功能的基于文档的应用程序
10.10 统一类型标识符
第11章 Core Data基本原理
11.1 NSManagedObjectModel
11.2 Interface
11.2.1 基于视图的表格视图
11.2.2 连接和绑定
11.2.3 Core Data 如何工作
11.3 补充知识:基于视图和基于单元格的表格视图比较
11.4 挑战
第12章 NIB文件和NSWindowController
12.1 NSPanel
12.2 向应用程序添加面板
12.2.1 设置菜单项
12.2.2 AppController.m
12.2.3 Preferences.xib
12.2.4 PreferenceController.m
12.3 补充知识:NSBundle
12.4 挑战
第13章 User Defaults
13.1 NSDictionary和NSMutableDictionary
13.1.1 NSDictionary
13.1.2 NSMutableDictionary
13.2 NSUserDefaults
13.3 设置Defaults
13.3.1 设置程序标识符
13.3.2 为defaults的名字建立键
13.3.3 注册defaults
13.4 让用户编辑Defaults
13.5 使用Defaults
13.5.1 禁用自动创建未命名新文档
13.5.2 设置表格视图的背景色
13.6 补充知识1:NSUserDefaultsController
13.7 补充知识2:从命令行读写Defaults
13.8 挑战
第14章 使用Notifications
14.1 Notifications 是什么
14.2 Notifications不是什么
14.3 NSNotification
14.4 NSNotificationCenter
14.5 发布notification
14.6 注册成为观察者
14.7 当notification到达时怎么处理
14.8 userInfo字典
14.9 补充知识:Delegates和 Notifications
14.10 挑战
第15章 使用告警窗口
15.1 让用户确认删除
15.2 挑战
第16章 本地化
16.1 本地化NIB文件
16.2 字符串表
16.2.1 创建字符串表
16.2.2 使用字符串表
16.3 补充知识1:ibtool
16.4 补充知识2:格式化字符串中符号的顺序
第17章 自定义视图
17.1 视图层次
17.2 绘制视图
17.2.1 创建视图子类的实例
17.2.2 Size Inspector
17.2.3 drawRect
17.3 使用NSBezierPath 绘图
17.4 NSScrollView
17.5 用程序创建视图
17.6 补充知识1:单元格
17.7 补充知识2:isFlipped
17.8 挑战
第18章 图片和鼠标事件
18.1 NSResponder
18.2 NSEvent
18.3 捕获鼠标事件
18.4 使用NSOpenPanel
18.4.1 修改XIB文件
18.4.2 代码编辑
18.5 在视图中合成图片
18.6 视图的坐标系统
18.7 Autoscrolling
18.8 补充知识:NSImage
18.9 挑战
第19章 键盘事件
19.1 NSResponder
19.2 NSEvent
19.3 使用自定义视图创建一个新的工程
19.3.1 界面布局
19.3.2 创建连接
19.3.3 编写代码
19.4 补充知识:Rollovers
19.5 毛边蓝框
第20章 绘制带属性的文本
20.1 NSFont
20.2 NSAttributedString
20.3 绘制字符串和属性字符串
20.4 显示字母
20.5 让视图生成PDF数据
20.6 补充知识:NSFontManager
20.7 挑战1
20.8 挑战2
第21章 粘贴板和Nil-Targeted Actions
21.1 NSPasteboard
21.2 在BigLetterView 中添加剪切、复制和粘贴功能
21.3 Nil-Targeted Actions
21.4 补充知识1:哪个对象发送了action消息
21.5 补充知识2:UTI和剪贴板
21.6 补充知识3:延迟复制技术
21.7 挑战1
21.8 挑战2
第22章 Categories
22.1 在NSString 中添加方法
22.2 补充知识:声明私有方法
第23章 拖放
23.1 设置BigLetterView 为拖动作的源
23.1.1 开始拖操作
23.1.2 释放以后
23.2 设置BigLetterView为拖操作的目的
23.2.1 registerForDraggedTypes:
23.2.2 添加高亮效果
23.2.3 实现拖操作目的方法
23.2.4 添加第二个的BigLetterView 对象
23.3 补充知识:Operation Mask
第24章 NSTimer
24.1 界面布局
24.2 建立连接
24.3 为TutorController添加代码
24.4 补充知识:NSRunLoop
24.5 挑战
第25章 工作表
25.1 添加sheet窗口
25.1.1 添加outlet和action
25.1.2 界面布局
25.1.3 添加代码
25.2 补充知识1:contextInfo
25.3 补充知识2:模式化窗口
第26章 创建NSFormatters
26.1 简单的格式化器类
26.1.1 创建ColorFormatter.h
26.1.2 编辑XIB文件
26.1.3 NSColorList
26.1.4 在字符串中搜索子串
26.1.5 实现基本的格式化器方法
26.2 NSControl类的Delegate
26.3 检查部分字符串
26.4 返回属性字符串的格式化器
26.5 补充知识:NSValueTransformer
第27章 打印
27.1 处理页面设置
27.2 补充知识:是在屏幕上绘图吗
27.3 挑战
第28章 Web Service
28.1 RanchForecast项目
28.1.1 NSURLConnection
28.1.2 在ScheduleFetcher中添加XML解析功能
28.1.3 界面布局
28.1.4 编写控制器代码
28.2 打开URL
28.3 挑战:添加一个WebView
第29章 Blocks
29.1 块语法
29.1.1 块内部的内存和对象操作
29.1.2 块的可用性
29.1.3 RanchForecast: 异步开发
29.1.4 接收异步响应
29.2 挑战:实现一个Delegate
第30章 iOS开发
30.1 将RanchForecast移植到iOS
30.2 RootViewController
30.3 添加导航控制器
30.4 ScheduleViewController
30.5 UITableViewController
30.6 视图控制器切换
30.7 挑战
第31章 视图切换
31.1 开始
31.1.1 创建管理视图控制器类
31.1.2 创建视图控制器及其XIB文件
31.2 给MyDocument添加视图切换功能
31.3 调整窗口尺寸
第32章 Core Data Relationships
32.1 模型编辑
32.2 创建自定义NSManagedObject类
32.2.1 Employee
32.2.2 Department
32.3 界面布局
32.4 事件及nextResponder
第33章 Core Animation
33.1 Scattered
33.2 隐式动画及action
33.3 挑战1
33.4 挑战2
第34章 并发性
34.1 多线程
34.1.1 巨大的分歧
34.1.2 简单的Cocoa后台线程
34.2 Scattered 升级版:Instruments 中的Time Profiling
34.3 NSOperationQueue
34.3.1 Scattered的多线程解决方案
34.3.2 线程的同步处理
34.4 补充知识:更快的Scattered 程序
34.5 挑战
第35章 Cocoa和OpenGL
35.1 一个简单的CocoaOpenGL应用程序
35.2 界面布局
35.3 代码编写
第36章 NSTask
36.1 ZIPspector
36.1.1 同步读取
36.1.2 iPing
36.2 挑战:.tar和.tgz文件
第37章 发布应用
37.1 Build Configurations
37.2 创建Release版本
37.3 应用沙箱
37.3.1 权限
37.3.2 文件访问与权限的折中
37.4 苹果应用商店
结束语
內容試閱 :
第1章
Chapter 1
什么是Cocoa
1.1 历史简介
Cocoa源于一段令人愉快的历史。很久以前,有两个叫Steve的家伙,他们在车库中开了一家名为Apple
Computer(苹果电脑)的公司。这家公司成长非常迅速,因此他们聘请了一名很有经验的执行官John
Sculley来担任公司的CEO。然而,在发生一系列矛盾冲突之后,John Sculley居然使Steve
Jobs离开了苹果公司。Steve Jobs在离开苹果公司之后成立了一家新的公司:NeXT Computer。
NeXT公司聘请一些很有才华的工程师组建了一个小团队。这个小团队除了进行计算机、操作系统、打印机以及一套开发工具的研发以外,还开了一家工厂。这些产品在那个年代都很超前,并且令人兴奋和惊讶。遗憾的是,他们的计算机和打印机都没有很好的市场。1993年,他们的工厂被迫关闭,NeXT电脑公司也变成了NeXT软件公司。
在NeXT软件公司里,操作系统和开发工具仍然采用NeXTSTEP的品牌销售。虽然普通的计算机用户很少听说过NeXTSTEP,但是NeXTSTEP在科研、投资银行和情报等领域非常流行。并且有一些人一直在使用NeXTSTEP开发应用程序,他们觉得相对于其他的技术,NeXTSTEP能够更快地将想法变为现实。
这是怎样的一个操作系统呢?NeXT使用了UNIX作为NeXTSTEP的内核,采用了加州大学伯克利分校开发的BSD
UNIX源代码。为什么选择UNIX呢?这是因为相对于微软的Windows或者苹果当时的操作系统,UNIX很少崩溃,并且能够提供强大可靠的网络功能。
苹果将这部分UNIX源代码作为Mac OS
X的底层基础,并将其命名为Darwin。有一个开源社区一直致力于提升Darwin。读者可以通过访问www.macosforge.org学习更多有关Darwin的内容。
然后,NeXT为操作系统编写了一个窗口服务器。窗口服务器接收用户事件,并转发给应用程序。于是,应用程序发送绘图命令给窗口服务器,让窗口服务器来刷新用户所见的界面。NeXTSTEP窗口服务器一个极好的优点是发给窗口服务器的绘制代码和发给打印机的一样,因此开发人员只需要编写一套绘制代码,便可同时用于屏幕显示和打印。在NeXTSTEP时代,开发人员编写生成PostScript的代码,而在Mac
OS X时代,开发人员使用Core
Graphics(也就是Quartz)框架的代码,Quartz可以在屏幕上合成这些图形,或者把它们发送到打印机,或者生成PDF(Portable
Document Format)数据(PDF是一个由Adobe公司制定的开放协议,用于矢量图形的存储)。
如果读者曾使用过UNIX,那么可能会比较熟悉X窗口服务器,Mac OS
X的窗口服务器与X窗口服务器完全不同,但是它能完成与X窗口服务器相同的功能:从用户那里接收事件,并将事件转发给应用程序;将应用程序发来的数据显示在屏幕上。
NeXTSTEP内置了一套库和工具,让开发人员以一种优雅的方式与窗口管理器进行交互。这些库也叫做框架,1993年,这些框架和工具被重新修改并重命名为OpenStep,后来重命名为Cocoa。