读书频道 > 网站 > 网页设计 > Objective-C 2.0 Mac和iOS开发实践指南
前  言
15-07-29    下载编辑
收藏    我要投稿   
本书分为四部分。第一部分介绍学习Objective-C编程所需的C语言基础知识以及面向对象程序设计。第二部分介绍Objective-C编程的核心知识,包括消息机制、类和对象、类对象、动态链接库、Foundation类等。第三部分介立即去当当网订购

Objective-C是C语言的面向对象扩展,可以称为“带有对象的C”。如果你正在阅读本书,就可能对学习Objective-C感兴趣,以便可以为Mac OS X或iOS编写应用程序。但是,学习Objective-C还有另一个理由:它是一门有趣的语言,并且相对容易学习。像现实世界中的其他任何事物一样,学习Objective-C也有一些难点。但是总体而言,它比其他面向对象语言要简单得多,特别是和C++相比就更是如此。Objective-C对C语言所进行的增补可以在一两页中列举出来。
 
Objective-C最初是由Brad J. Cox于20世纪80年代早期创建的。在1988年,由Steve Jobs在离开Apple后创建的NeXT Computer公司许可使用Objective-C,并使之成为用于创建在NeXT的NeXTSTEP操作系统下运行的应用程序的开发环境的基础。NeXT工程师开发了一组Objective-C库,用于构建应用程序。在NeXT于1993年从硬件业务中全身而退之后,它与Sun Microsystems合作创建了OpenStep,这是一种针对面向对象系统的开放性规范,并且基于NeXTSTEP API。Sun最终失去了对OpenStep的兴趣。NeXT继续销售其OpenStep版本,直到Apple于1997年早期收购了它为止,NeXTSTEP操作系统也随之变成了OS X的基础。

在Apple世界,Objective-C并不是在孤军奋战,它与许多类库(称为框架(framework))协同工作。OS X上两个最重要的框架是Foundation框架和AppKit框架,Foundation框架包含用于基本实体(比如字符串和数组)的类以及包装了与操作系统进行交互的类。AppKit包含用于窗口、视图、菜单、按钮以及构建图形用户界面所需的其他各种构件(widget)的类。这两个框架合称为Cocoa。在iOS上,用一个名为UIKit的不同框架代替了AppKit,Foundation和UIKit则合称为Cocoa Touch。

虽然从技术上讲使用其他语言编写完整的OS X程序是可能的,但是编写一个遵循Apple的Human Interface Guidelines(人机界面指南)并且具有正确的Mac“外观和感觉”的程序则需要使用Objective-C Cocoa框架。即使用不同的语言(比如纯C语言或C++)编写Mac应用程序的核心,也应该用Objective-C编写用户界面层。在为iOS编写程序时,将别无选择:iOS应用程序的外层和用户界面必须用Objective-C编写。

关于本书

本书集中介绍了学习Objective-C语言。它将不会讲述如何编写Cocoa或Cocoa Touch程序,而是将介绍和利用Foundation框架的一小部分,并且只会顺便提及AppKit和UIKit。本书假设:如果你已经很好地理解了Cocoa和Cocoa Touch所基于的语言,那么学习Cocoa和Cocoa Touch编程将容易得多。

一些计算机图书在编写时,采用了我喜欢视之为“跟我学”的风格。将邀请用户复制或下载一些代码,其后接着代码的简要讨论。在引入新特性时,将要求读者更改相关的代码行并观察结果。在进行一点讨论之后,将继续介绍下一个特性。我发现将这种图书风格用于语言类图书无法让人满意。通常,对于实际的工作方式只有非常少的解释。这种图书风格容易引起误解,当读者面临的编程任务不是图书中使用的某个示例的小变体时,他们的自信心将会消失。

本书采用了一种更适宜于教学的方法,并且使用小示例来强调语言的工作方式。除了学习语言的语法之外,还鼓励你考虑“在后台”所发生的事情。这种方法需要你付出更多的努力,但是在你第一次面临新的编程任务时,它将会给你很好的补偿。

本书读者对象

本书适合于那些先前具有一些编程经验并且想要学习Objective-C以便为OS X或iOS编写程序的人阅读(iOS用于iPhone、iPod touch和iPad)。

对于那些想要使用来自GNUStep项目(OpenStep库的开源实现)的软件为其他平台编写Objective-C程序的程序员来说,本书也很有用。

你需要知道什么

本书假设读者掌握C语言的基础知识。Objective-C是C语言的一个扩展,本书主要关注Objective-C向C语言中添加了什么功能。对于那些对C语言感到生疏以及那些擅长于快速学习一门新语言的人,第1章和第2章回顾了C语言的基本部分,这些是你在编写Objective-C程序时很可能要用到的。如果没有使用C语言或任何类似C的语言(C++、Java和C#)的经验,有必要再阅读一本关于C语言的图书。此前接触过一种面向对象语言是有帮助的,但这并不是绝对需要的。随着本书的推进,将会介绍必需的面向对象概念。
 
关于示例

为一本介绍性的图书创建代码示例提出了一个挑战:在阐释要点时,怎样才能不迷失在建立一个工作程序可能需要的样板代码的汪洋大海中。在许多情况下,本书都采用了以下方法:使用在一定程度上假想的示例,并对它们进行了“瘦身”,以便帮助你集中精力关注所讨论的要点。因此,示例中省略了不相关的代码部分,并用省略号(…)代替它们。
 
例如:

上面的代码行表示应该意味着averageScore是一个整型变量,并从程序的其他某个部分获取它的值。averageScore 值的来源对于该示例来说是不相关的,你只需考虑它具有一个值。

关于练习

本书中大多数章的末尾都有一组练习,当然鼓励你完成它们。许多练习要求你编写小程序来验证在那一章中介绍的要点,这样的练习可能看上去很冗长,但是编写代码并查看结果将会提供比仅仅阅读代码更生动的学习体验。编写小程序来测试你的理解是应该养成的良好习惯;无论何时不清楚某个要点,都应该编写一个这样的程序,即便本书没有提供相关的练习,也应该这样做。在我编写完本书时,有一个目录中装满了小测试程序。当你学完本书时,应该也是如此。

练习所建议的程序都不需要用户界面。可以利用文本编辑器编写代码并从命令行编译和运行它(如第2章中的练习之前所示的)或者使用简单的Xcode项目(如第4章),来编码、编译和运行所有这些程序。

Objective-C—一个移动的目标

Objective-C是一个移动的目标。在过去几年间,Apple定期向Objective-C中添加一些新的特性和语法。尽管添加了这些特性,但是Apple决定不继续版本化该语言。Objective-C 2.0是它们推出的最高版本。指定语言的特定版本或特性集的唯一方式是:在提及Objective-C时,带上Xcode或LLVM编译器的特定版本。本书这一版介绍的是截止到Xcode 4.4(随同OS X 10.8 Mountain Lion一起发布)的Objective-C,或者相当于在LLVM Compiler/Clang 4.0中实现的Objective-C。

是否使用ARC

Objective-C使用称为保留计数(retain counting)的内存管理系统。每个对象都会保留正在使用它的其他对象的数量统计值。当这个计数归零时,将把对象的内存返还给系统以便重用。在历史上,这个系统是“手动”的—必须编写代码在合适的时间操纵对象的保留计数。对于许多人来说,要100%正确地遵守这个系统的规则是很困难的。不遵守规则而造成的不幸后果是内存泄漏和程序崩溃。

2011年春季,Apple引入了ARC(Automatic Reference Counting,自动引用计数)。ARC通过分析程序并且自动插入将正确地保留计数的代码,来自动执行引用计数系统。程序员一方无需编写任何代码。

一些人坚称ARC避免了学习手动内存管理以及引用计数如何工作的需要。他们说:“无需知道引擎如何工作,也能驾驶汽车,同样,无需知道手动引用计数,也能利用ARC编写Objective-C程序。”事实确实如此,但是就像知道一些有关汽车的引擎如何工作的知识也可能是有价值的一样,在一些情况下,理解手动内存管理可能是有价值的或者甚至是必要的。

有许多现有的代码还没有转换成使用ARC。如果要求你处理非ARC代码,或者如果你想要使用非ARC的开源项目,将不得不理解手动引用计数。

在Objective-C框架下面有一组C语言库(“核心”级的库)。这些库是用面向对象风格编写的,并且具有它们自己的引用计数系统。虽然要尽可能使用Objective-C框架,但是在一些情况下(例如,在图形中)必须使用更低级的库。要正确地使用这些库,必须理解手动引用计数的概念。

一些对象是“免费桥接”的(参见第8章)。可以把一个指向低级C语言对象之一的指针强制转换为一个指向Objective-C框架对象的指针,反之亦然。在ARC下执行该操作需要进行几种特殊的强制转换之一,而决定使用哪种强制转换则需要理解手动引用计数以及ARC正在为你自动做什么。

在一些情况下(例如,在一个紧凑循环中创建大量的临时对象),可以通过执行一些手动调优,保持程序的内存占用比较少。执行这种调优需要理解引用计数是如何工作的。

ARC仍然相对较新,在极端情况下仍然会出现怪异的错误或者意想不到的行为。如果遇到其中一种情况,将需要理解幕后所发生的事情,以便推断如何消除障碍。

在为本书第2版做准备工作时,ARC让我有点进退两难。我应该放弃关于手动引用计数的章节并且只使用ARC吗?我深深地感觉这将是一个糟糕的选择,但是为了帮助我做决定,我问了许多同事这个问题。他们的答案全都一致:理解引用计数如何工作很重要,首先要讲述它,然后介绍ARC。因此,本书讲述了手动内存管理,直到第16章为止。在你理解了第16章中的知识之后,就可以返回到前面章节中的练习上来,并使用ARC完成它们。你将发现学习如何进行手动引用计数然后享受在大多数情况下不用这样做的自由要比在紧急情况的基础上学习它容易得多,因为你遇到了上述列表中的情况之一。

本书组织结构

本书包括4个部分。第一部分回顾了C语言,然后介绍了面向对象程序设计和Objective-C。第二部分详细介绍了Objective-C语言,还介绍了Foundation框架。第三部分介绍了Objective-C中的内存管理和Objective-C块。第四部分是附录,介绍了一些额外的知识。

第一部分:Objective-C简介

第1章概述C语言的基础知识,并且介绍了在编写Objective-C程序时最有可能需要用到的C语言知识。

第2章继续回顾C语言,其中讨论了C和Objective-C程序的内存布局,以及不同类型的变量的内存位置和生存期。即使你知道C语言,也可能想要通读该章。许多经验丰富的C程序员也不完全知道该章包含的知识。

第3章开始介绍面向对象程序设计的概念,并且继续探讨这些概念是如何在Objective-C中体现的。

第4章引领你逐行查看一个简单的Objective-C程序,还介绍了如何使用Apple的集成开发环境Xcode创建一个项目,然后编译和运行一个Objective-C程序。往后就可以使用这些知识来完成本书其余部分的练习。

第二部分:语言基础

对象(object)是面向对象程序设计的主要实体;它们把变量(称为实例变量(instance variable))和类似于函数的代码块(称为方法(mothod))组织到单个实体中。类是对象的规范,它列出了组成给定类型的对象的实例变量和方法,并且提供了实现这些方法的代码。对象更加具体,它是一个内存区域,类似于C语言的结构,用于保存由对象的类所定义的变量。一个特定的对象被称为定义它的类的一个实例。

第5章开始对Objective-C语言进行全面介绍。在Objective-C中,可以通过给一个对象发送一条消息(message)来让它“做某件事情”。消息是一个方法的名称加上该方法所带有的任何参数。为了响应接收到的消息,对象会执行相应的方法。该章将介绍方法、消息以及Objective-C消息传递系统是如何工作的。

第6章介绍如何定义类,以及创建和复制对象实例。该章还介绍继承(inheritance),即通过扩展现有类(而不是从头开始)来定义一个类的过程。

在执行一个Objective-C程序的过程中,使用的每个类都由一段内存来表示,其中包含关于该类的信息。这段内存称为类的类对象(class object)。类也可以定义类方法(class method),它们是代表类(而不是类的实例)执行的方法。

第7章介绍类对象和类方法。与某些其他的面向对象语言中的类不同,Objective-C的类没有类变量,即类的所有实例共享的变量。该章的最后几节说明如何通过使用静态变量来获得类变量的效果。

第8章描述Apple封装动态链接库的方式。该章介绍框架的定义和结构,并简要描述在编写OS X或iOS程序时将会遇到的一些常见框架。

第9章介绍最常用的Foundation类:用于字符串、数组、字典、集合和数字对象等的类。

第10章讨论当使用带有C语言控制结构的Objective-C构造时,需要考虑的额外一些问题。

该章继续介绍Objective-C所添加的额外的控制结构,包括Objective-C 2.0的快速枚举(Fast Enumeration)构造。该章最后解释Objective-C的异常处理系统。

第11章说明如何向现有类中添加方法而不需要子类化它,以及如何隐藏你认为私有的方法和实例变量的声明。该章最后讨论Objective-C的安全性问题。

第12章介绍Objective-C 2.0的声明式属性(declared property)特性。属性是对象的特征,通常通过对象的实例变量之一来建模。设置或获取属性的方法称为访问器方法(accessor method)。通过使用声明式属性这种特性,可以要求编译器合成属性的访问器方法及其实例变量,从而大大节省你自己的精力。

第13章介绍一种表征对象的不同方法。协议是一组定义的方法,类可以选择实现它们。在许多情况下,重要的不是一个对象的类,而是对象的类是否通过实现协议中声明的方法来采用特定的协议(多个类可以采用一个给定的协议,一个类也可以采用多个协议)。Java的接口概念就借用自Objective-C协议。

第三部分:高级概念

第三部分中的各章详细介绍内存管理和Objective-C块。

第14章讨论内存管理的问题,并且简要介绍Objective-C提供的两种内存管理系统。

第15章介绍Objective-C的传统手动引用计数系统。引用计数也称为保留计数(retain counting)或托管内存(managed memory)。在使用引用计数的程序中,每个对象都会保存一个计数,称为保留计数(retain count),这是使用该对象的其他对象的数量。当这个计数减少到0时,就会释放该对象。该章介绍使保留计数保持有序所需的规则。

第16章介绍自动引用计数(ARC)。ARC不是一种完全不同的内存管理系统。相反,ARC会自动执行Objective-C的传统引用计数系统。ARC是一个编译时进程,它将分析Objective-C代码,并插入合适的内存管理消息。

第17章讨论Objective-C 2.0的块(block)特性。块类似于匿名函数,但是,除此之外,块还携带有其包围环境中变量的值。块是Apple的GCD(Grand Central Dispatch,大中央调度)并发机制的核心特性。

第18章介绍几个次要的知识点,它们不适合放在本书中的其他位置。

第四部分:附录

附录A提供对编译器具有特殊含义的名称表以及Objective-C编译器指令的列表。编译器指令是以@字符开头的单词,它们是在各种情况下发出给编译器的指令。

附录B给出Foundation类的列表,它们的实例具有与低级C语言的Core Foundation框架中的对应对象相同的内存布局,并且可能互换使用。

附录C简要讨论32位和64位的环境。

附录D描述一个会影响一些面向对象程序设计语言的问题,以及Objective-C如何避免该问题。

附录E列出一些对于Objective-C开发人员有用的图书和Web站点。

读者服务

访问我们的Web站点并在informit.com/register上注册本书,就可以方便地访问可能为本书提供的任何更新、下载或勘误表。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站