商家名称 | 信用等级 | 购买信息 | 订购本书 |
华章程序员书库:苹果开发之Cocoa编程(原书第4版) [平装] | |||
华章程序员书库:苹果开发之Cocoa编程(原书第4版) [平装] |
《华章程序员书库:苹果开发之Cocoa编程(原书第4版)》编辑推荐:经典畅销书全新升级,全面且深入地讲解了Cocoa编程的各项知识,被誉为Mac OS X编程图书领域的标杆,是从零开始系统学习Cocoa编程的首选!
Aaron的这本书是Mac OS X编程图书领域的标杆——措辞优雅、精雕细琢,是开发苹果应用的优秀图书。
——Scott Stevenson,the ocacao网
经过几个版次的市场检验,本书已经被公认为从零开始学习Cocoa编程的首选。Aaron是少数(很可能是唯一)全职的专业Cocoa讲师之一,他多年的教学经验都浓缩于本书中。
——Tim Burks,资深软件工程师/Nu编程语言创始人
如果你是工作在UNIX或Windows平台上的程序员,希望为Mac OS X开发一些新应用,或者想将应用移植到Mac上,那么这本书是必备的参考书和培训资料。
——Kevin H. Spencer,Apple认证技术协调员
作者:(美国)希莱加斯(Aaron Hillegass) 普雷布尔(Adam Preble) 译者:黄敏 郝刚
希莱加斯(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编程的主讲教师。
译者序
前言
致谢
第1章什么是Cocoa
1.1历史简介
1.2开发工具
1.3编程语言
1.4对象、类、方法和消息
1.5框架
1.6如何阅读本书
1.7约定
1.8常见错误
1.9如何学习
第2章起步
2.1Xcode
2.1.1新建项目
2.1.2main函数
2.2Interface Builder
2.2.1utility区
2.2.2空白窗口
2.2.3页面布局
2.2.4dock
2.2.5创建一个类
2.2.6创建一个实例
2.2.7创建连接
2.3回顾Objective—C
2.3.1Objective—C中的类型和常量
2.3.2查看头文件
2.3.3编辑实现文件
2.3.4编译和运行
2.3.5awakeFromNib
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.2dealloc函数
4.1.3自动释放对象
7.2绑定
7.3键-值观察KVO
7.4使对象的键可观察
7.5Properties
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.1NSInvocation
9.2 NSUndoManager的工作机制
9.3为RaiseMan添加撤销功能
9.4键-值观察
9.5撤销编辑操作
9.6插入后立即编辑
9.7补充知识:窗口和undo管理器
第10章Archiving
10.1NSCoder和NSCoding
10.1.1编码
10.1.2解码
10.2文档架构
10.2.1Info.plist和NSDocumentController
10.2.2NSDocument
10.2.3NSWindowController
13.2NSUserDefaults
13.3设置Deflaults
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.3NSNOtification
14.4 NSNOtificationCenter
14.5发布notification
14.6注册成为观察者
14.7当notification到达时怎么处理
14.8userInfo字典
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章 自定义视图
第18章 图片和鼠标事件
第19章 键盘事件
第20章绘制带属性的文本
第21章粘贴板和Nil-Targeted Actions
第22章Categorjes
第23章 拖放
第24章 nstimer
第25章 工作表
第26章 创建nsformatters
第27章 打印
第28章 web service
第29章 blocks
第30章 ios开发
第31章 视图切换
第32章 core data relationships
第33章 core animation
第34章 并发性
第35章 cocoa和opengl
第36章 nstask
第37章 发布应用
结束语
前言
如果你正在开发或者希望进行Mac应用开发,那么这本书就是你所需要的。本书是否涵盖了所有Mac应用编程的相关知识?当然不是,不过本书涉及了Mac开发接近80%的内容。读者可以在Apple公司的在线文档中找到剩余的20%,而这20%正是独属于你的。
本书展示了应用开发的基础,包含了Objective-C语言和Cocoa的主要设计模式。读者还可以熟悉最常用的两个开发工具:Xcode和Instruments。阅读完本书之后,读者就可以理解并使用Apple公司的在线文档了。
本书包含很多代码。通过这些代码,笔者将向读者讲解Cocoa社区的一些惯用法。希望通过实践这些示例代码,读者不仅能够成为一名Cocoa开发人员,而且还能够成为一名优秀的Cocoa开发人员。
第4版涉及在MacOSX10.6和10.7中引入的一些技术,包括Xcode4、ARC(AutomaticReferenceCounting,自动内存管理技术)、blocks、view-basedtableviews和Mac应用商店。本书专门安排一章用于讲述iOS的基本开发。
本书适合已经具备一些C语言基础且了解一些面向对象知识的开发人员。假如读者并不知道C语言或面向对象的概念,那么读者首先应该学习《Objective-CProgramming:TheBigNerdRanchguide》。读者并不需要具备Mac编程经验。这是一本实战类的图书,因此读者需要安装MacOSX系统和开发工具。Xcode4.2、Apple的IDE都可免费下载、安装。如果读者是Mac的付费会员,或者隶属iOS开发者联盟,也可以从Apple公司的开发者网站下载Xcode(http://developer.apple.com/)。开发者注册成为上述成员,可将自己的应用程序提交到Apple公司的Mac应用商店或iOS应用商店。
笔者将尽可能地让本书更加实用。
Aaron Hillegass
Adam Preble
版权页:
插图:
相较于复杂的NSOperation对象创建方式,这里使用了NSOperationQueue的addOperationWittBlock:,来创建NSBlockOperation对象,并将其添加到队列中。请注意,这里代码更改还是比较少的,程序最主要的流程也没有进行改变。一般情况下并不这样进行多线程的处理,但是可以看到,通过对域内变量的引用,锁定机制帮助开发者避免了很多复杂代码。
34.3.2线程的同步处理
在这个例子中还不需要担心race conditions,其原因在于,程序设计时就避免了与后台线程进行数据结构共享。后台线程的工作只是进行文件夹计数、打开图片以及创建thumbnails等。这个例子中唯一的共享数据就是Core Animation layers,但它也只是由mian线程进行了修改而已。避免了race conditions,多线程看起来就太简单了。
并不是所有的多线程都可以通过这种方法来解决,很多时候需要保护代码块(或者多个代码块),以确保某个时间点上只有一个线程能运行。这通常通过互斥锁(互相排斥的锁定)来完成。Objective—C提供了一个简单的方法来部署互斥锁——@synchronized指令。
@synchronized指令使用了互斥锁,这与传值对象不同。在这个例子中,我们锁定images对象,就是一个NSMutableArray实例。由于NSMutableArray对象并不是thread—safe(就是说该对象并不是用于多线程操作的),因此,在多线程环境中进行操作时推荐使用互斥锁。使用@synchronized指令可以保证:当所有的@synchronized指令在一个确定的对象上操作时,只有一个线程在某个时间点上可以执行封装的代码块。因此,如果有两个线程同时都要调用addlmage:方法,第一个线程将获得锁,可以进行图片对象的添加;而第二个线程将被锁住,直到这个锁被释放。
读者可能对为什么NSMutableArray不是thread-safe感到困惑。一个原因是互斥锁与它有负载关联,线程的安全性使得NSMutableArrays对象的性能明显下降;另一个原因就是,通常情况下锁定某个代码块比进行一个单独的线程调用,更有用、也更普遍一些,这样看起来好像是将对象从一个数据结构移动到另一个数据结构。
Cocoa提供了一系列的工具用于线程同步,如NSLock和NSCondition。对于这些工具,可以看看NSOperationQueue中的相关资料,Grand Central Dispatch在《Advanced MacOS XProgramming》中也进行了详尽的讨论。
更多图书资讯可访问读书人图书频道: http://www.reader8.com/book/