首页>参考读物>计算机科学与技术>软件与程序设计

iOS 程序设计(原书第2版)
作者 : (美)Matt Neuburg 著
译者 : 陈建设 刘洋 薛晓东 李明 译
出版日期 : 2013-04-26
ISBN : 978-7-111-41847-4
定价 : 129.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 789
开本 : 16
原书名 : Programming iOS 5
原出版社: OReilly Media, Inc.
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书前言

苹果公司通过推出第2版iPhone系统做到了一件了不起的事:用已有的Cocoa计算机程序设计框架来为内存和速度都受限的小型触摸屏设备编写应用程序。结果,由此诞生的Cocoa Touch在很多方面比原来的Cocoa还要好。
  编程框架都有自己的个性,框架的整体感觉能让人窥见设计者的目标和心态。第一次接触Cocoa Touch时,我对它的评价是:“哇,这真是个聪明人的杰作!”苹果公司虽然故意只在iPhone系统中提供了很少几个内置的界面部件,但它们却比Mac OS X中的对应部件强大而灵活得多,比如UITableView等。更重要的是,苹果公司还为开发者提供了一种非常完美的方法(UIViewController),帮助程序员用基于层次结构的方法对界面的显示、隐藏和替换进行控制。只能在iPhone小屏幕上运行的应用程序因此能够不断展开为多个界面,用户也不至于受到困扰。
  更妙的是,苹果公司借此机会把Cocoa打造成全新的Cocoa Touch,并证明了它的优势。Cocoa是一个古老的框架,它的出现甚至早于Mac OS X,在NeXTStep中就存在了。Cocoa日积月累逐渐壮大,为向后兼容性保持了传统的设计。现在,苹果公司紧紧抓住了Cocoa Touch的出现这一机会,抛弃了陈旧的设计。
  因此,Cocoa Touch虽然在概念上基于Mac OS X Cocoa,却与后者截然不同,也不由后者定义或限制。Cocoa Touch是一个独立的框架,是一个更精练、更简单、更智能的Cocoa。我能举出无数例子来赞美Cocoa Touch中经过仔细斟酌的系统性设计(以及对奥卡姆剃刀原则的严格遵循)。译注例如Mac OS X的动画层是后来才匆匆加入视图中的,而Cocoa Touch中的所有视图从一开始就有与之对应的动画层。再如Cocoa Touch的内存管理策略更简单而清晰,当nib文件载入时,顶层对象的管理方法更明确。这样的例子数不胜数。
  但是,Cocoa Touch归根结底还是来源于Cocoa。它仍然要求开发者具有Objective-C的知识。这不是一门脚本语言,它当然也不是针对非程序员的,诸如HyperCard的HyperTalk或苹果公司的AppleScript这样的语言。它是一门庞大而复杂的语言,学起来并不轻松。
  iPhone和iPad的流行以及该平台上大量价格低廉甚至免费的应用程序已经为苹果公司带来了大批新程序员,而且新人还会持续增多。他们在iOS平台上看到了Mac OS X中没有的机会。苹果公司年度的WWDC开发者大会也反映了这种趋势,苹果逐渐将重心从Mac OS X转移到iOS上。
  虽然广大程序员对iOS的热忱令人欣喜,但这也造成了大量程序员急功近利,走路都没学会就开始跑。iOS给了程序员强大的主动权,让他们能做想象中的任何事情。但是,iOS同样要求程序员具有必备的基础知识。我经常在网上看到有人提出一些基础问题,他们明显已经沉浸在了开发新应用的乐趣中,却由于不熟悉基础知识而备受打击。
  正是这样的现状让我想要写这本书,为读者介绍iOS的基础知识。我热爱Cocoa,早就希望为它写点东西,iOS的流行坚定了我这么做的决心。在写作过程中,本书的主题是“Cocoa Touch编程基础”。在本书中,我将尝试用便于教学的欧几里德式的逻辑顺序提纲挈领地阐述健壮iOS编程所需的基础原则。本书介绍了Objective-C的基础知识(从C语言出发),面向对象编程原则,工具的使用建议,Cocoa对象实例化、引用、相互通信及生命周期管理的完整流程,以及主要界面部件的常见用法与其他常见任务。和我的前一本书一样,我希望你能从本书发现新大陆而兴致勃勃地从头至尾阅读本书,也可将它放到手边以备随时参考。
  写本书的目的不是为了替代苹果公司自己的文档和示例工程。苹果公司提供了很棒的在线文档,它们还在不断完善和改进。在准备写作的过程中,我非常依赖于这些资料。同时我还发现它们无法替代有组织且条理性强的教程。由于无法保证读者会按固定的顺序访问在线文档,文档作者也不知道读者在阅读时已经储备了哪些知识。这让在线文档更适合作为参考资料,而不是教程。示例工程中的注释写得再完美,也仍然让人难以理解——它只是为了演示,无法进行教学。
  本书则不是这样,本书由章节组成,按页码排序。因而我能够先介绍C语言之后再介绍Objective-C。除了基础知识,本书还会介绍具体的开发经验。贯穿全书你都能看到我提及“初学者常犯的错误”,这其中大部分是我自己犯过的错误。我会尝试说明哪儿有陷阱,否则你可能也会像我一样轻易就掉了进去。在阅读过程中,你能看到我一点点建立起很多完整的示例,或者从稍大的应用程序中拿出一小块进行分析和解释。能教会你编程的并不是一个完整的大项目,而是开发项目的思维过程。我希望你能从本书中获得的正是掌握这种思维过程。
  iOS是一个很大的框架,根本无法把所有内容浓缩到一本书中,就连这本大厚书也不行。其实把全部内容压缩到本书中也是不必要且不合适的。本书省略了Cocoa Touch中的若干内容,其中一些内容需要完整的一本书才能清晰描述,而另一些则是在你有了一定基础之后就能轻松地从苹果公司文档中学会的知识。本书只是一个开头,介绍的是基础知识。我希望本书的内容能够为你打下坚实的基础,足以让你应付今后有价值而且有趣的iOS编程中所遇到的各种问题。
本书约定
  下面是关于本书印刷字体方面的一些约定:
  斜体(Italic)
  表示新的术语、URL、电子邮件地址、文件名以及文件扩展名。
  等宽字体(Constant width)
  用于列出程序清单,也用在正文中表示程序中的变量名、函数名、数据库、数据类型、环境变量、语句和关键字等内容。
  等宽粗字(Constant width)
  表示需要由用户键入的命令或文本。
  等宽斜体字符(Constant width)
  表示需要由用户提供的值或由上下文确定的值替换的内容。
  注意:这个符号表示提示、建议或一般的注解。
  警告:这个符号表示警告。
示例代码的使用
  本书的目的是帮助你。一般来说,可以在自己的程序和文档中使用本书的代码。除非复制了相当数量的代码,否则你并不需要联系我们以征得同意。例如,在程序中使用本书中的几段示例代码不必获得许可,但销售或分发包含O扲eilly书籍示例代码的CD-ROM则必须取得我们的授权。引用文书的文字或代码回答问题无需授权,但在自己的产品文档中加入大量本书的示例代码则需要经过我们的许可。
我们欢迎你标明出处,但并不强求。标明出处时通常需要包含书名、作者、出版社以及ISBN,例如,“Programming iOS 5 by Matt Neuburg(O扲eilly). Copyright 2012 Matt Neuburg, 978-1-4493-1934-2”。如果你认为你对代码示例的使用已经超出以上的许可范围,我们很欢迎你通过permissions@oreilly.com联系我们。
Safari联机丛书
Safari联机丛书是应需而变的数字图书馆,它允许你轻松检索超过7500本科技及创新性的参考书籍和视频资料。在此你能快速找到需要的答案。
获得订阅后,你就能访问联机丛书中的全部页面和视频。你能在手机或移动设备上阅读,能在新书上市前就开始阅读,还能访问仍在创作中的图书并向作者提供反馈。你能复制粘贴代码示例,组织收藏夹,下载部分章节,标记关键信息,做笔记,打印页面,还能使用大量其他帮你节省时间的功能。
O扲eilly Media已经将本书加入Safari联机丛书服务中。要访问本书的电子版或来自O扲eilly及其他出版社的相关图书,请到http://my.safaribooksonline.com免费注册。
如何联系我们
请将本书的评论及疑问发给出版社。
美国:O扲eilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
  我们还为本书建立了一个网页,其中包含勘误、示例以及其他信息。其地址是:
  http://shop.oreilly.com/product/0636920023562.do
  要评论本书或咨询相关技术问题,请发送电子邮件至:
  bookquestions@oreilly.com
  要获取更多有关我们书籍、课程、会议及新闻的信息,请访问http://www.oreilly.com。
  我们的Facebook页面:http://facebook.com/oreilly
  在Twitter上关注我们:http://twitter.com/oreillymedia
  在YouTube上观看我们的视频:http://www.youtube.com/oreillymedia
第1版致谢
  工欲善其事,必先利其器。我在本书的写作过程中利用了很多非常优秀的工具。衷心感谢我的Unicomp Model M键盘(http://pckeyboard.com),没有它我完全无法想象如何才能轻松地敲出这么多文字。很多优秀的软件同样也给了我帮助,包括TextMate(http://macromates.com)以及AsciiDoc(http://www.methods.co.nz/asciidoc)。BBEdit(http://www.barebones.com)的diff显示方式也很有帮助。书中出现的屏幕截图使用Snapz Pro X(http://www.ambrosiasw.com)以及GraphicConverter(http://www.lemkesoft.com)制作。图表使用OmniGraffle(http://www.omnigroup.com)绘制。
  O'Reilly优秀的制作工序能在我工作时就把AsciiDoc文本文件转化为PDF格式,让我在模拟的书籍样式中进行检查。要是没有它,以及Early Program程序帮助我在写作过程中定期向读者提供书籍内容更新,我从一开始就不会接受这个工作。我还特别要感谢工具专家Abby Fox一直以来给我提供的帮助。
  我采纳了Dave Smith和David Rowland这两位技术审校者提出的很多建议。我还从很多读者中得到了物质和精神上的帮助,他们向我提供勘误,给我鼓励。我尤其有幸与编辑Brian Jepson合作,他热情地指导我使用O扲eilly工具,调整电子版格式,仔细检查图书中的错误,给予了我充分的信任。在我需要与O扲eilly各个部门进行交流时,他还受累充当了中间人的角色。我在O扲eilly写的所有书都离不开Nancy Kotary的帮助,她将我充斥着大量短句的写作风格进行了改善,今后也请多关照。本书中出现的所有错误当然由我来承担责任。
第2版致谢
  我无疑要再次感谢我的编辑Brain Jepson,是他促使我写出新版本。Brain,现在可以放下鞭子了!同样感谢O扲eilly团队,他们在各方面给予了我帮助。感谢热忱而忠实的读者给了我许多鼓励和建议。
第2版说明
  为了介绍本书第2版和第1版的关系,我首先需要概括一下最近iOS和Xcode的版本历史。
  我刚开始写本书第1版时,iPhone的系统版本为3.1.3,iPad为3.2。在写作过程中,iOS 4和iPhone 4发布了,但iOS 4并不能在iPad上运行。后来,苹果公司发布了iOS 4.2,这是第一版同时支持iPhone和iPad的系统。与此同时,Xcode更新到了3.2.5。iOS 4也是第一版支持多任务的系统,开发人员不得不修改应用程序使其适应新世界的规则。
  正当我最后一次修订第1版前,Xcode 3.2.6和iOS 4.3发布了,同时还发布了期待已久的Xcode 4的第1个公开版本。Xcode 4可以说是一个全新的集成开发环境,它在菜单、窗口、首选项等各方面都与Xcode 3.2.x不相同。一台Mac中能同时安装Xcode 4与Xcode 3.2.x(最高支持Snow Leopard),它们也能用于开发同一个工程。Xcode 4移除了Xcode 3.2.x中的一些功能,因而一些开发者继续使用旧版本。这样的局面让我很难明确地描述开发过程。对于iOS开发来说,我还是推荐使用Xcode 4,本书第1版就假设读者已经使用了Xcode 4。
  这就是2011年5月的情况。当时本书第1版正式出版,介绍了在iOS 4上的编程。
  2011年10月,苹果发布了iOS 5。iOS 5中的一些新功能对开发的细枝末节产生了很大的影响,本书因此有必要进行全面的修订。苹果同时还发布了Xcode 4.2。由于这是官方支持iOS 5开发的最早Xcode版本,因此本书假设你正在使用这一版本(或较新版)的Xcode。(通过一系列的技巧,更早的Xcode或许也可以用于iOS 5开发,但这种行为并不支持。)本书第1版包含Xcode 3.2.x中的一些菜单命令和其他界面说明,但这一版删除了这些内容。Xcode 4.2有两个版本,分别在开发机器上运行Snow Leopard(Mac OS X 10.6)和Lion(Mac OS X 10.7)。虽然它们本应完全相同,但各版本都有自己的bug,你可以两种都试试。
  正当我在2012年2月完成本书第2版时,Xcode 4.3发布了(仅支持Lion)。它的主要创新在于磁盘文件的组织上:下载的Xcode 4.3不再是安装程序,不会在顶层Developer文件夹中包含众多附属文件及文件夹。它将整个Developer文件夹包含在文件包中(能用Finder的显示包内容命令查看)。当说到Developer文件夹时,你要知道这实际上指的是/Applications/Xcode.app/Content/Developer。除此以外,我还没有找到Xcode 4.2和Xcode 4.3的其他重大区别。在本书中我有时会说“Xcode 4.2”,而这指的是Xcode 4.2或更新的版本。
  这一版的主要目的是为iOS 5更新书中的内容。由于读者可能首次接触iOS开发,本书假设读者没有任何在iOS 4或者更老版本的系统上开发的知识。但有的读者可能像我一样从iOS 4过渡到iOS 5,因而本书对iOS 5中的新功能重点进行了介绍。这些内容也能帮助新的iOS开发人员写出可以在iOS 4中运行的应用程序。但是,我这样做的目的并不是为读者提供过时的累赘信息。绝大多数支持iOS 4的设备都已经更新到了iOS 5,我们能比较放心地假设大量用户使用的是iOS 5。因此,不是一定要让应用程序能在旧版本iOS系统中运行的。从教学的角度上看,介绍老旧的方法也没什么好处。对于本书来说,当你确实想了解旧版系统的相关内容时还可以参考前一版。因此,从这一版中删除了iOS 4.2之前的内容。
  这里可以举个例子,说明我在本书这一版中对iOS 5中新功能的态度以及教学方法。iOS 5支持的ARC(自动引用计数)彻底改变了Objective-C程序员管理对象内存的方法。甚至可以说,它把Objective-C变成了一门全新的语言。虽然可以选择在iOS编程中不使用ARC,但是由于它对开发有极大的促进作用,我在本书中还是会假设你启用了ARC。第12章介绍了内存管理,这里会像前一版那样向读者描述ARC出现前内存如何管理。但是在其他所有章节中,除非特别说明,所有的示例代码均应该在开启ARC的情况下执行。在Xcode中使用File→New Project(文件→新工程)菜单项建立新的工程,随后选择任何iOS应用程序模板,如果在第2步中选中复选框“Use Automatic Reference Counting”,则会启用ARC。
  iOS 5还提供了串联圈这一新功能。串联圈类似于nib文件,允许开发者直接“绘制”界面。二者的主要区别在于一个串联圈文件能够完成多个nib文件的工作。它们在一些地方有所区别,使用方法也不尽相同。但由于它们性质相似,当我在本书中笼统地提到nib文件时,指的是nib或串联圈文件。虽然我会尽量使用完整的名称,但是当我忘了说nib或串联圈时希望各位读者能够谅解我。
  最后,我还想对向本书前一版慷慨地提出了批评意见的读者说几句。他们或多或少认为:
  1. 这不是一本“食谱书”译注2。
  2. 这本书居然用了好几百页来讲基础知识。
  3. 书里没有提供让读者能够立即上手的示例应用程序,甚至没有“Hello World”教程。
  这些意见都相当中肯,我承认确实如此。但本书的目录以及这个前言一直试图说明:本书根本就不是这些意见中提到的那类书。直截了当地说,本书就是这样的书,而不是其他什么书。这才是我写这本书的最初目的。这些评论希望本书应该是其他什么类型的。但在我看来,那样的书已经够多了,稀缺的正是本书这样的。和我以前进行写作的原因一样,写这本书的原因是我找不到我所需要的书,我不得不自己写一本。我希望本书能对那些确实需要这样一本书的人提供帮助。希望本书是其他类型的读者应该购买别的书,而不是在本书的网站上批评它与想象中相差甚远。我从一开始就没有打算把本书写成那样。
  本书会按顺序分重点介绍实际iOS开发所需要的相关知识。这正好与“食谱书”完全相反。本书没有为读者准备简单的教程,只要填入自己的代码就能创建一个应用程序。我认为授之以鱼不如授之以渔。市面上充斥着大量草率地忽略基础知识的书,它们让读者自己学习Objective-C,鼓励大量开发者在尚未打好基础时就尝试进行开发。根据这些开发者提出的问题以及产生的迷惑,我相信他们这时完全不明白自己在做什么。
  本书就想纠正这种现象,这要求我介绍大量的基础知识。本书并未强迫你从头至尾阅读所有的基础知识。如果你真的认为已经掌握了所有有关C、Objective-C、Xcode、Cocoa、视图、绘图以及其他东西的知识(你真的确定吗?),尽管跳过开头的几章吧!但请不要对我为需要的人讲解基础知识所费的笔墨而不快。
  这就解释了为什么本书没有立即让读者上手编程。本书不是写给那些只能鹦鹉学舌般照着教程写代码的“程序员”的。我的书所讲的是真正的知识,是历经辛苦才能学到的知识。书中所讲的内容能帮你理解进行iOS 5开发的每一步究竟做了什么。这要求投入大量的时间和精力,在开始做任何有实用价值的演示前,我需要介绍大量基础知识。
  或许他们误解的部分原因在于没有注意或理解,我之前说的本书会以“便于教学的欧几里德式的逻辑顺序”书写。有些人不知道“欧几里德式”是什么意思。欧几里德写出了第一本世代相传的数学教科书。该书的特色之一是:如果概念B依赖于概念A,就会先介绍概念A。没有什么会推迟,欧几里德绝不会说:“我会在之后解释(证明、讨论)这个东西,现在先姑且相信我说的话。”我试着复制欧几里德的模型。这里举一个例子。每一个iOS应用程序都会用视图控制器,因此,读者在读到第19章描述视图控制器的内容前不会知道真实的iOS应用程序会涉及哪些东西。但要理解视图控制器,需要先理解它控制的究竟是什么;因而第14章以及第四部分剩下的内容都在讨论视图。要掌握视图控制器和视图间的关系,需要先学会Cocoa的架构模式,例如,生命期事件以及响应者链;这就是第11章以及第三部分讨论的内容。视图控制器的视图通常会从nib中载入,这一点在第7章中讨论。以上所有这些都要求首先掌握操作它们时用到的编程语言Objective-C,因此有了第3章。最后,由于Objective-C是C语言的超集,这样就有了第1章。可以看出,要更早地接触到视图控制器几乎是不可能的。我的论证到此结束。
  另外,还有读者抱怨本书没有任何可运行的代码。很奇怪,书中到处都有示例代码啊!所有这些代码都能从我的GitHub网站下载(https://github.com/mattneub)。你可以获取这些代码,在Xcode中运行,尽情进行研究。你可以一边阅读一边运行相关的代码,而我也建议你这么做。但是,这些代码并不是为了好玩才写的,它们的作用是帮助你理解书中相应的概念。
  在任何情况下,完美的“Hello World”教程一点也不稀奇,网上到处都有,包括苹果公司自己的网站(http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/Articles/)。根本不需要我来演示写一个简单的iPhone应用程序是多么有趣和轻松。
  不过,有人强烈建议我提供“Hello World”程序,否则我的工作就没有做完。既然如此,下面我就给出一个例子,你们可以根据以下步骤一步一步完成:
  1. 安装Xcode,启动Xcode。
  2. 选择File→New→New Project(文件→新建→新工程)。
  3. 在Choose a template对话框中,单击左侧的“iOS”(不是“Mac OS X”)下的“Application”。在对话框右侧,单击“Empty Application”。单击Next按钮。
  4. 在“Product Name”中输入Hello。如果“Company Identifier”为空,则输入公司标识符,例如com.yourLastName.yourFirstName。在“Device Family”中选择iPhone。确保3个复选框都没有选中。单击Next按钮。
  5. 导航到桌面。不要选中“Create local git repository”复选框。单击Create按钮。
  6. 这时工程窗口将会打开。按Command+1组合键。在窗口左半部分单击AppDelegate.m。
  7. 现在需要在窗口中部的编辑器中工作。在代码中找到“Override point for customization after application launch.”这一行。将光标移动到该行最右侧并按几次Return键,创建一些空格。在空格中的某处单击,键入下面的代码:
  8. 按Command+R组合键,如果有窗口弹出询问是否保存,请接受。
  9. 稍等片刻,iOS Simulator程序会自动启动,里面会有一个白色的窗口,其中显示了“Hello, world!”。
  恭喜!你完成了第一个“Hello world”程序。这难道不简单吗?难道不无聊吗?难道还有什么重要的意义吗?实际上,你自己还能做得比写刚刚那个程序更好吧?如果你想知道这个问题的答案,想学到足够的知识以便走得更远,继续阅读这本书吧!

上架指导

计算机\程序设计

封底文字

iOS程序设计
全面掌握Cocoa Touch的基础知识,避免在iPhone及iPad开发时遇到各种问题。本书这一版修订并扩充了上一版的内容,全面覆盖了iOS的内容。通过本书,你能深入剖析Cocoa,学会如何用好Objective-C和Xcode。不管是首次接触iOS,还是需要一本参考书来提升技能,本书都是不二的选择。
学习iOS 5引入的新功能,包括ARC内存管理、故事板、父视图控制器、页视图控制器、外观代理、Core Image以及发射层。
 学习Objective-C语言的细节以及面向对象程序设计理念。
 理解Xcode工程的结构和生命周期的每个阶段。
 掌握Cocoa的关键概念,例如,类之间的联系、接收事件以及模型-视图-控制器架构。
 学会管理、绘制、组合视图和层,并创建动画。
 熟悉视图控制器以及它们之间的联系,管理nib和故事板。
 深入剖析每一个基本界面对象,例如,滚动视图、表格视图和控件。
 深入Cocoa框架中的声音、传感器、地图等功能。
 尝试使用线程和网络等高级功能。
“Neuburg是我最喜爱的编程书籍作者了,就是这样。”
——John Gruber,Daring Fireball

作者简介

(美)Matt Neuburg 著:Matt Neuburg获有古典学博士学位,曾在多所大学及学院任教。他从1968年起就开始从事程序设计,为 OS X和iOS开发了多个应用程序。他曾是《MacTech》杂志的编辑,现在是TidBITS的长期特约编辑。他以前所著的O’Reilly图书包括《Frontier:The Definitive Guide》、《REALbasic:The Definitive Guide》和《AppleScript:The Definitive Guide》。

译者简介

陈建设 刘洋 薛晓东 李明 译:暂无简介

译者序

正如多年前苹果公司开创了个人PC的时代一样,iPhone开创了移动互联网的时代,苹果公司再次以梦幻的舞步重新回到了舞台的中心。锐意创新和追求完美的苹果公司,在让用户得到美妙而极致体验的同时,也将Objective-C和Cocoa带入到更多程序员的视野中。很少有开发平台能够与iOS相提并论,其一流的系统和框架设计,能够帮助开发者迅速开发出非常优秀的作品。
  现在,国内有越来越多的程序员投身到iOS应用和游戏开发的队伍中,无论是新手入门还是需要巩固现有技能,本书都是一本非常好的参考书籍。本书作者本着“授之以鱼不如授之以渔”的态度,深入浅出地介绍了iOS开发中许多必备的基础知识和高级技巧,以理论和实践相结合的方式,并辅以详尽的说明,指导读者掌握iOS的开发技能。作为译者和开发人员,在翻译的过程中,我也学习到了大量的知识。本书并没有为读者准备照搬就可以运行的代码,但是书中所讲的内容都旨在帮助读者理解每一步背后的含义,彻底掌握iOS开发技术。
  本书的作者Matt Neuburg有着多年的开发经验,并且是专业技术杂志的特约编辑,有丰富的培训和咨询经验,并在大学中任教。由这样具备实战和教学经验的作者倾力打造的书,自然是一本不可多得的好书。本书涵盖了iOS的方方面面,从Objective-C语言基础和Xcode开发环境介绍,到对Cocoa框架和视图动画的深入剖析,再到线程和网络等高级的主题,本书作者洋洋洒洒、丰富细腻地描绘了iOS这个宏大的主题,可以说真正做到了授之以渔。
  本书由陈建设、刘洋、薛晓东、李明合作翻译。感谢机械工业出版社的吴怡老师在整个翻译过程中耐心而细致的工作,及时的沟通协调,我们才得以顺利地完成本书的翻译工作。感谢机械工业出版社的谢晓芳编辑细心严谨的审稿,进一步保证了译文的质量。虽然我们在翻译过程中竭力以信达雅为目标,但是囿于经验和能力,书中的问题和疏漏在所难免,恳请广大读者批评指正。
陈建设

图书目录

前言
第一部分 语言
第1章 C语言的精髓 2
1.1 编译、语句和注释 3
1.2 变量声明、初始化和数据类型 4
1.3 结构体 6
1.4 指针 7
1.5 数组 9
1.6 运算符 10
1.7 流程控制和条件 12
1.8 函数 15
1.9 指针参数和地址运算符 17
1.10 文件 19
1.11 标准库 21
1.12 更多预处理器指令 22
1.13 数据类型限定符 22
第2章 基于对象的程序设计 24
2.1 对象 24
2.2 消息和方法 25
2.3 类和实例 26
2.4 类方法 27
2.5 实例变量 28
2.6 基于对象的程序设计 29
第3章 Objective-C对象和消息 32
3.1 实例引用就是指针 32
3.2 消息和方法 37
3.3 类型转换和id类型 42
3.4 消息的数据类型 44
3.5 C语言函数 45
3.6 CFTypeRef 46
3.7 块对象 47
第4章 Objective-C类 51
4.1 类和父类 51
4.2 接口和实现 52
4.3 头文件和实现文件 54
4.4 类方法 56
4.5 悄然产生的类对象 56
第5章 Objective-C实例 58
5.1 如何创建实例 58
5.2 多态 62
5.3 self关键字 63
5.4 super关键字 66
5.5 实例变量和存取器 67
5.6 键值编码 68
5.7 属性 69
5.8 如何书写初始化器 71
第二部分 IDE
第6章 Xcode工程的解析 74
6.1 新建工程 74
6.2 工程窗口 76
6.3 工程文件及其依赖 83
6.4 目标 85
6.5 从工程到应用 89
第7章 nib管理 99
7.1 nib编辑界面之旅 99
7.2 nib加载和文件所有者 104
7.3 生成和加载nib文件 105
7.4 插座变量链接 106
7.5 动作链接 113
7.6 对基于nib的实例进行额外初始化 116
第8章 文档 118
8.1 文档窗口 118
8.2 类的文档页 119
8.3 示例代码 122
8.4 其他资源 123
第9章 工程生命周期 126
9.1 选择设备架构 126
9.2 本地化 129
9.3 编辑代码 130
9.4 代码导航 132
9.5 调试 135
9.6 单元测试 141
9.7 静态分析器 141
9.8 清理 142
9.9 在模拟器中运行 142
9.10 在设备上运行 143
9.11 设备管理 146
9.12 版本控制 146
9.13 Instruments 148
9.14 发布 151
9.15 Ad Hoc发布 153
9.16 应用的最后准备 154
9.17 提交到App Store 158
第三部分 Cocoa
第10章 Cocoa类 162
10.1 创建子类 162
10.2 类别 164
10.3 协议 166
10.4 可选方法 170
10.5 一些Foundation类 171
10.6 NSObject探秘 180
第11章 Cocoa事件 183
11.1 产生事件的原因 183
11.2 创建子类 184
11.3 通知 185
11.4 委托 190
11.5 数据源 192
11.6 动作 193
11.7 响应者链 197
11.8 应用程序生命周期事件 199
11.9 被事件淹没 203
第12章 存取器和内存管理 206
12.1 存取器 206
12.2 键值编码 207
12.3 内存管理 210
12.4 属性 234
第13章 数据通信 240
13.1 模型-视图-控制器 240
13.2 实例可见性 242
13.3 通知 244
13.4 键值观察 246
第四部分 视图
第14章 视图 252
14.1 窗口 252
14.2 子视图和父视图 255
14.3 外框 257
14.4 边界和中心 258
14.5 布局 261
14.6 变换 263
14.7 可见性与不透明度 266
第15章 绘图 268
15.1 UIImage 和 UIImageView 268
15.2 图形上下文 271
15.3 UIImage绘图 274
15.4 CGImage绘图 275
15.5 CIFilter 和 CIImage 278
15.6 绘制UIView 280
15.7 图形上下文设置 282
15.8 路径和绘图 283
15.9 剪裁 286
15.10 渐变 287
15.11 颜色和图案 288
15.12 图形上下文变换 290
15.13 阴影 291
15.14 点和像素 292
15.15 内容模式 293
第16章 图层 295
16.1 视图和图层 296
16.2 图层和子图层 297
16.3 在图层中绘制 301
16.4 变换 306
16.5 阴影和边框 311
16.6 图层和键值编码 313
第17章 动画 315
17.1 绘图、动画和线程 315
17.2 UIImageView和UIImage动画 318
17.3 视图动画 320
17.4 隐式图层动画 329
17.5 核心动画 332
17.6 动作 346
17.7 发射层 351
第18章 触摸 356
18.1 触摸事件和视图 356
18.2 接收触摸 358
18.3 限制触摸 359
18.4 解释触摸 360
18.5 手势识别器 364
18.6 触摸传送 373
第五部分 界面
第19章 视图控制器 384
19.1 视图控制器的层次结构 386
19.2 视图控制器和创建视图 389
19.3 旋转 402
19.4 被展示视图控制器 407
19.5 标签栏控制器 415
19.6 导航控制器 418
19.7 页面视图控制器 426
19.8 容器视图控制器 429
19.9 串联图 431
19.10 视图控制器生命周期事件 435
19.11 视图控制器内存管理 437
第20章 滚动视图 441
20.1 创建滚动视图 441
20.2 滚动 444
20.3 缩放 449
20.4 滚动视图委托 454
20.5 滚动视图的触摸 456
20.6 滚动视图的性能 460
第21章 表格视图 461
21.1 表格视图单元格 463
21.2 表格视图数据 476
21.3 表格视图选择 486
21.4 表格视图滚动及布局 491
21.5 表格视图搜索 492
21.6 编辑表格视图 497
21.7 表格视图菜单 506
第22章 弹出窗口及分栏视图 509
22.1 配置和显示弹出窗口 510
22.2 弹出窗口管理 514
22.3 关闭弹出窗口 515
22.4 弹出窗口Segue 518
22.5 自动弹出窗口 519
22.6 分栏视图 521
第23章 文本 527
23.1 UILabel 528
23.2 UITextField 529
23.3 UITextView 539
23.4 Core Text 541
第24章 Web视图 549
24.1 内容加载 550
24.2 与Web视图通信 555
第25章 控件及其他视图 557
25.1 UIActivityIndicatorView 557
25.2 UIProgressView 558
25.3 UIPickerView 560
25.4 UISearchBar 562
25.5 UIControl 565
25.6 栏式控件 580
25.7 外观代理 587
第26章 模态对话框 590
26.1 警告视图 590
26.2 动作表单 593
26.3 对话框替代方案 596
26.4 本地通知 597
第六部分 一些框架
第27章 音频 602
27.1 系统声音 602
27.2 音频会话 603
27.3 音频播放器 608
27.4 远程控制声音 610
27.5 在后台播放声音 612
27.6 关于声音的高级主题 613
第28章 视频 617
28.1 MPMoviePlayerController 617
28.2 MPMoviePlayerViewController 622
28.3 UIVideoEditorController 623
28.4 AV Foundation视频的介绍 625
第29章 音乐库 630
29.1 浏览音乐库 630
29.2 音乐播放器 634
29.3 音乐选择器 638
第30章 照片库和图片拍摄 641
30.1 UIImagePickerController 641
30.2 使用AV Foundation拍摄图片 646
30.3 资源库框架 648
第31章 地址簿 652
31.1 地址簿数据库 652
31.2 地址簿的界面 654
第32章 日历 659
32.1 日历数据库 659
32.2 日历界面 665
第33章 邮件 670
33.1 邮件消息 670
33.2 短信 671
第34章 地图 672
34.1 显示地图 672
34.2 注解 674
34.3 叠加层 680
第35章 传感器 686
35.1 位置 686
35.2 朝向 693
35.3 加速度和姿态 694
第七部分 最后的主题
第36章 持久化存储 706
36.1 沙盒 706
36.2 基本的文件操作 707
36.3 保存和读取文件 708
36.4 用户预置 710
36.5 文件共享 711
36.6 文档类型 712
36.7 处理文档 713
36.8 文档结构 716
36.9 XML 720
36.10 SQLite 726
36.11 图片文件格式 727
第37章 网络基础 729
37.1 HTTP请求 729
37.2 Bonjour 736
37.3 推送通知 737
37.4 除了基础网络之外 738
第38章 线程 739
38.1 主线程 739
38.2 为什么线程难懂 741
38.3 三种使用线程的方式 742
38.4 线程和应用进入后台 753
第39章 撤销 755
39.1 撤销管理器 755
39.2 撤销界面 758
39.3 撤销架构 760
第40章 结语 762

教学资源推荐
作者: 邱李华 曹青 郭志强
作者: [美]沃特·萨维奇 (Walter Savitch) 肯里克·莫克(Kenrick Mock)著
作者: 刘艺 罗兵 周安栋
作者: [美] 罗伯特·W. 塞巴斯塔(Robert W. Sebesta) 著