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

Objective-C 2.0 Mac和iOS开发实践指南(原书第2版)
作者 : (美)Robert Clair 著
译者 : 陈宗斌 李江晋 等译
丛书名 : 华章程序员书库
出版日期 : 2014-12-01
ISBN : 978-7-111-48456-1
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 376
开本 : 16
原书名 : Learning Objective-C 2.0: A Hands-on Guide to Objective-C for Mac and iOS Developers
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

资深Mac OS X和iOS应用开发者Robert Clair亲力打造,内容全面且深入,是学习Objective-C 2.0的最佳入门指南
既展示Objective-C的强大功能,又全方位讲解利用Objective-C为Mac OS X或iOS开发应用的各种技术细节、方法和最佳实践,包含Objective-C 2.0的新增特性

如果你想学习Objective-C 2.0,以便为Mac、iPhone、iPad编写应用,那么本书非常适合你!
资深Mac OS X和iOS应用开发者Robert Clair在本书中带领你从基础知识学起,循序渐进讲解Objective-C的新增特性。本书首先对C语言进行了回顾并且简单介绍了面向对象程序设计;其次引领你使用Apple的集成开发环境Xcode创建自己的第一个Objective-C程序;最后,你将掌握核心的语言特性:类、对象、消息传递、定义的属性、协议和块等。每个概念都利用简单的示例加以说明,并且许多章都包含实用的实践练习。此外,书中还详细介绍了Objective-C 2.0的新增特性,包括ARC、数组和字典字面量、数组和字典下标、装箱表达式、默认合成的属性,以及在类扩展或者类实现中声明实例变量。

通过阅读本书,你将学到:
复习Objective-C的基础,即C语言的基本知识
了解面向对象程序设计
了解方法、消息和Objective-C消息传递系统
定义类、创建对象实例和使用类对象
使用常用的Foundation类,用于处理字符串、数组、字典和数字对象
利用Objective-C 2.0的声明式属性简化开发
使用类别扩展类,而无须进行子类化
使用协议强调行为,而不是类
了解Objective-C 2.0的安全问题
使用块打包功能,以便在不同的时间和位置执行它
深入了解内存管理和ARC



作者简介
Robert Clair  资深Mac OS X和iOS应用开发者,拥有Oberlin学院的物理学学士学位,以及加州大学伯克利分校的物理学硕士和博士学位。他在商业软件开发领域拥有20多年从业经验,主要从事CAD、建模和图形方面的工作。在过去10年里,他主要从事Mac上的Objective-C开发工作,现在转移到iPhone上。他开发了ZeusDraw(用于Mac OS X的一款矢量绘图应用)和ZeusDraw Mobile(用于iPhone的一款绘图应用)。他还是众多iPhone和iPad应用的顾问。

内容简介
资深Mac OS X和iOS应用开发者Robert Clair亲力打造,内容全面而深入,既展示Objective-C的强大功能,又全方位讲解利用Objective-C为Mac OS X或iOS开发应用的各种技术细节、方法和最佳实践,是学习Objective-C 2.0的最佳入门指南,助你成为一名合格的Objective-C程序员。
本书分为四部分,共18章。第一部分(第1~4章)回顾Objective-C编程所需的C语言基础知识,并介绍面向对象程序设计的概念,以及在Objective-C中将如何实现这些概念。第二部分(第5~13章)介绍Objective-C编程的核心知识,包括消息机制、类和对象、类对象、动态链接库、Foundation类等。第三部分(第14~18章)介绍Objective-C中的高级概念,包括内存管理、手动引用计数、自动引用计数和Objective-C块特性等。第四部分(附录A~E)提供Objective-C程序员常用的一些额外信息和资料。本书大多数章都提供了练习,读者可以通过练习巩固在书中学到的知识。
本书内容精练、可读性强、易于学习,侧重通过示例来介绍知识点和概念,是一本学习Objective-C 2.0不可多得的入门实践指南。本书适合想要学习Objective-C 2.0编程语言的初、中级程序员阅读,也可以作为社会培训机构的入门级培训教辅材料。

图书前言

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上注册本书,就可以方便地访问可能为本书提供的任何更新、下载或勘误表。

上架指导

计算机\程序设计

封底文字

如果你想学习Objective-C 2.0,以便为Mac、iPhone、iPad编写应用,那么本书非常适合你!
资深Mac OS X和iOS应用开发者Robert Clair在本书中带领你从基础知识学起,一直到Objective-C的新增特性。本书首先对C语言进行了实用复习并且简单介绍了面向对象程序设计;其次引领你使用Apple的集成开发环境Xcode创建自己的第一个Objective-C程序;最后,你将掌握核心的语言特性:类、对象、消息传递、定义的属性、协议和块等。每个概念都利用简单的示例加以说明,并且许多章都包含实用的实践练习。此外,书中还详细介绍了Objective-C 2.0的新增特性,包括ARC、数组和字典字面量、数组和字典下标、装箱表达式、默认合成的属性,以及在类扩展或者类实现中声明实例变量。

通过阅读本书,你将学到:
·复习Objective-C的基础,即C语言的基本知识
·了解面向对象程序设计
·了解方法、消息和Objective-C消息传递系统
·定义类、创建对象实例和使用类对象
·使用常用的Foundation类,用于处理字符串、数组、字典和数字对象
·利用Objective-C 2.0的声明式属性简化开发
·使用类别扩展类,而无须进行子类化
·使用协议强调行为,而不是类
·了解Objective-C 2.0的安全问题
·使用块打包功能,以便在不同的时间和位置执行它
·深入了解内存管理和ARC

作者简介

(美)Robert Clair 著:Robert Clair拥有20年以上的商业图形软件和CAD软件开发经验。在过去的8年中,他主要从事Mac OS X和iPhone开发。作为Chromatic Bytes公司的负责人,他曾经设计过OS X软件(ZeusDraw和Shades)以及iPhone软件(ZeusDraw Mobile和Orfeo)。他还是多个iPhone和iPad应用程序的顾问。

译者简介

陈宗斌 李江晋 等译:暂无简介

译者序

作为Mac OS X与iOS应用程序的开发语言,Objective-C近年来颇受关注。尤其是智能手机与平板电脑兴起之后,越来越多的开发人员将目光转向移动开发平台,并开始学习Objective-C语言。
Objective-C最初是由Brad J. Cox于20世纪80年代早期创建的,它是C语言的面向对象扩展,可以称为“带有对象的C”。目前,虽然从技术上讲使用其他的语言编写完整的OS X程序是可能的,但是编写一个遵循Apple的Human Interface Guidelines(人机界面指南)并且具有正确的Mac“外观和感觉”的程序则需要使用Objective-C Cocoa框架。即使用不同的语言(比如纯C语言或C++)编写Mac应用程序的核心,也应该用Objective-C编写用户界面层。在为iOS编写程序时,将别无选择:iOS应用程序的外层和用户界面必须用Objective-C编写。随着移动应用程序开发热潮到来,关注与学习Objective-C的人也越来越多。
本书集中介绍了Objective-C语言,采用了一种适合教学的方法讲解内容。本书分为4个部分。第一部分回顾了C语言,然后介绍了面向对象程序设计和Objective-C。第二部分详细介绍了Objective-C语言,还介绍了Foundation框架。第三部分介绍了Objective-C中的内存管理和Objective-C块。第四部分是附录,介绍了一些额外的知识。
本书使用小示例来强调语言的工作方式。除了学习语言的语法之外,还鼓励读者考虑“在后台”所发生的事情。在本书大多数章的末尾都提供了一组练习,可以帮助读者巩固所学的知识。
本书适合于那些先前具有一些编程经验并且想要学习Objective-C以便为OS X或iOS编写程序的人阅读。对于那些想要使用来自GNUStep项目(OpenStep库的开源实现)的软件为其他平台编写Objective-C程序的程序员来说,本书也非常具有参考价值。
参加本书翻译的人员有:陈宗斌、李江晋、戴锋、许瑛琪、易小丽、孙朝辉、宋如杰、蔡江林、孙丽、易志东、叶守运、李刚生、傅强、徐茜、张旭。
由于时间紧迫,加之译者水平有限,错误在所难免,恳请广大读者批评指正。

图书目录

第1版赞誉
译者序
前言
致谢
第一部分 Objective-C简介
第1章C语言——Objective-C的基础2
1.1C程序的结构3
1.1.1main例程3
1.1.2格式化4
1.1.3注释4
1.1.4变量和函数名称5
1.1.5 命名约定5
1.1.6 文件6
1.2 变量6
1.2.1 整型7
1.2.2 浮点型8
1.2.3 真值8
1.2.4 初始化8
1.2.5 指针9
1.2.6 数组10
1.2.7 多维数组11
1.2.8 字符串11
1.2.9 结构12
1.2.10 typedef13
1.2.11 枚举常量13
1.3 运算符14
1.3.1 算术运算符14
1.3.2 余数运算符14
1.3.3 递增和递减运算符15
1.3.4 优先级15
1.3.5 取负运算符16
1.3.6 比较运算符16
1.3.7 逻辑运算符16
1.3.8 逻辑“非”运算符17
1.3.9 赋值运算符17
1.3.10 转换和强制转换18
1.3.11 其他赋值运算符19
1.4 表达式和语句19
1.4.1 表达式19
1.4.2 表达式求值20
1.4.3 语句20
1.4.4 复合语句20
1.5 程序流程20
1.5.1 if语句21
1.5.2 条件表达式22
1.5.3 while语句22
1.5.4 do-while循环23
1.5.5 for语句23
1.5.6 break语句24
1.5.7 continue语句24
1.5.8 逗号表达式25
1.5.9 switch语句25
1.5.10 goto语句26
1.5.11 函数27
1.5.12 声明函数29
1.6 预处理器29
1.6.1 包括文件29
1.6.2 #define30
1.6.3 条件编译30
1.6.4 printf31
1.7 命令行编译和调试33
1.8 小结35
1.9 练习35
第2章关于C变量的更多知识37
2.1 C程序的内存布局37
2.2 自动变量38
2.3 外部变量39
2.4 声明关键字40
2.4.1 auto40
2.4.2 extern40
2.4.3 static41
2.4.4 register41
2.4.5 const41
2.4.6 volatile42
2.5 作用域43
2.5.1 自动变量的作用域43
2.5.2 复合语句和作用域43
2.5.3 外部变量的作用域44
2.6 动态分配44
2.7 小结47
2.8 练习47
第3章面向对象程序设计简介49
3.1 面向对象程序设计49
3.1.1 类和实例50
3.1.2 方法50
3.1.3 封装50
3.1.4 继承51
3.1.5 多态性51
3.1.6 面向对象语言的主要特点是什么51
3.2 Objective-C简介52
3.2.1 定义类52
3.2.2 使用类名作为类型55
3.2.3 消息传递(调用方法)55
3.2.4 类对象和对象创建57
3.2.5 内存管理58
3.3 Objective-C的增补功能58
3.3.1 运行库58
3.3.2 名称59
3.3.3 消息表达式59
3.3.4 编译器指令59
3.3.5 字面量字符串60
3.3.6 Objective-C的关键字60
3.3.7 框架62
3.3.8 框架数值类型63
3.4 小结64
第4章你的第一个Objective-C程序65
4.1 利用Xcode构建程序65
4.2 Objective-C的程序结构69
4.3 面向对象的“Hello World”72
4.3.1 Greeter.h73
4.3.2 Greeter.m75
4.4 main.m78
4.5 小结80
4.6 练习80
第二部分 语 言 基 础
第5章消息传递84
5.1 方法84
5.1.1 一个简单的方法84
5.1.2 带有参数的方法85
5.2 消息传递87
5.3 消息传递的细节89
5.3.1 嵌套89
5.3.2 消息传递nil90
5.3.3 把消息发送给self91
5.3.4 重写并给super发送消息91
5.3.5 选择器93
5.3.6 具有相同名称的方法95
5.3.7 动态和静态类型化96
5.4 幕后的工作原理97
5.5 消息转发98
5.6 效率99
5.7 内省及其他运行库趣事101
5.8 小结102
5.9 练习102
第6章类和对象104
6.1 定义类104
6.1.1 接口部分104
6.1.2 @class指令106
6.1.3 实现部分106
6.1.4 导入107
6.2 子类化一个类108
6.2.1 定义子类108
6.2.2 子类化的示例108
6.2.3 类层次结构112
6.2.4 类层次结构示例112
6.2.5 抽象类113
6.3 创建对象114
6.3.1 对象分配114
6.3.2 对象初始化115
6.4 销毁对象122
6.5 复制对象123
6.5.1 浅复制和深复制124
6.5.2 可变复制和不可变复制124
6.5.3 在自己的类中实现复制125
6.6 小结127
6.7 练习128
第7章类对象129
7.1 类对象129
7.1.1 Class类型130
7.1.2 类方法132
7.2 其他类方法133
7.2.1 便利构造函数133
7.2.2 单例134
7.2.3 初始化类135
7.3 模拟类变量136
7.4 小结141
7.5 练习142
第8章框架144
8.1 框架是什么145
8.2 Cocoa和Cocoa Touch145
8.2.1 OS X146
8.2.2 iOS146
8.3 AppKit147
8.4 UIKit147
8.5 Core Foundation框架148
8.5.1 Core Foundation对象的内存管理149
8.5.2 免费桥接150
8.6 Core Graphics151
8.7 Core Animation152
8.8 Apple提供的其他框架153
8.9 第三方框架153
8.10 幕后的工作原理154
8.11 小结155
第9章常用的Foundation类156
9.1 不可变类和可变类156
9.2 类簇157
9.3 NSString158
9.3.1 NSString示例159
9.3.2 在C字符串与NSString之间来回转换161
9.3.3 NSMutableString161
9.3.4 字面量字符串162
9.4 集合类162
9.4.1 NSArray162
9.4.2 NSDictionary165
9.4.3 NSSet166
9.5 NSNumber167
9.6 NSNull169
9.7 NSData170
9.7.1 访问NSData的字节170
9.7.2 在文件与NSData之间转移内容171
9.8 NSURL171
9.9 Objective-C字面量和对象下标172
9.9.1 NSArray字面量172
9.9.2 NSDictionary字面量173
9.9.3 NSNumber字面量173
9.9.4 装箱表达式174
9.9.5 对象和下标176
9.9.6 给自己的类添加下标177
9.10 结构178
9.11 iOS上的几何结构180
9.12 小结180
9.13 练习180
第10章Objective-C中的控制结构183
10.1 if语句183
10.2 for语句和隐式循环187
10.2.1 for语句187
10.2.2 隐式循环188
10.2.3 带有块的隐式循环188
10.3 while语句和NSEnumerator189
10.4 快速枚举191
10.5 使用快速枚举的示例193
10.6 异常196
10.6.1 抛出你自己的异常197
10.6.2 多个@catch块198
10.6.3 嵌套的异常处理199
10.6.4 使用异常199
10.6.5 你应该使用异常吗200
10.7 小结201
10.8 练习202
第11章类别、扩展和安全204
11.1 类别204
11.1.1 利用类别重写方法207
11.1.2 类别的其他用途208
11.2 关联引用208
11.3 扩展210
11.4 实例变量作用域(访问控制)212
11.5 隐藏实例变量声明213
11.6 针对方法的访问控制215
11.7 命名空间216
11.8 安全216
11.9 从Objective-C中调用C函数219
11.9.1 技术部分219
11.9.2 实践部分219
11.9.3 哲学部分219
11.10 小结220
11.11 练习220
第12章属性222
12.1 在对象外面访问实例变量(不要这样做)223
12.2 声明和实现访问器224
12.3 使用属性的访问器226
12.4 合成的实例变量229
12.5 默认使用@synthesize229
12.6 合成总结230
12.6.1 显式声明230
12.6.2 默认的合成方式231
12.7 私有属性231
12.8 @property语句231
12.8.1 assign、retain和copy232
12.8.2 readwrite和readonly232
12.8.3 nonatomic233
12.8.4 setter=name和getter=name233
12.8.5 attributes和@dynamic233
12.9 关于@dynamic的更多知识234
12.10 没有实例变量的属性234
12.11 属性和内存管理235
12.12 提前探讨自动引用计数(ARC)236
12.12.1 strong236
12.12.2 weak237
12.12.3 unsafe_unretained237
12.13 子类化和属性237
12.14 用于readonly属性的隐藏的设置器238
12.15 属性作为文档239
12.16 点语法239
12.16.1 点语法和属性241
12.16.2 点语法和C结构241
12.17 小结243
12.18 练习244
第13章协议245
13.1 协议的理论基础245
13.2 使用协议246
13.2.1 声明协议246
13.2.2 采用协议247
13.2.3 协议作为类型248
13.2.4 属性和协议248
13.3 TablePrinter示例249
13.3.1 TablePrinterDataSource249
13.3.2 TablePrinter250
13.3.3 FruitBasket252
13.3.4 main253
13.3.5 一个问题254
13.3.6 实现可选方法255
13.4 协议对象和一致性测试255
13.5 非正式协议256
13.6 小结257
13.7 练习258
第三部分 高 级 概 念
第14章内存管理概述260
14.1 问题261
14.2 解决方案:Objective-C内存管理261
14.2.1 引用计数(手动引用计数)262
14.2.2 自动引用计数(ARC)262
14.3 继续学习下面的内容263
第15章引用计数264
15.1 引用计数的基础知识264
15.2 接收对象266
15.3 所有权268
15.4 dealloc269
15.5 返回对象270
15.5.1 自动释放272
15.5.2 自动释放池272
15.5.3 管理自动释放池273
15.5.4 回到便利构造函数上来274
15.5.5 自动释放和iOS275
15.5.6 使用额外的自动释放池控制内存使用275
15.6 retainCount276
15.7 多线程276
15.8 何时保留计数会出错278
15.9 保留循环280
15.10 最后说再见:曲终人散时283
15.11 小结283
15.12 练习284
第16章ARC286
16.1 ARC是什么,不是什么287
16.2 ARC的工作方式287
16.3 ARC会强加一些规则289
16.3.1 你不能自己调用内存管理方法289
16.3.2 ARC和dealloc289
16.3.3 方法命名约定290
16.3.4 ARC需要看到方法声明291
16.3.5 Objective-C指针和C结构292
16.4 新的变量修饰符293
16.4.1 __strong293
16.4.2 __weak294
16.4.3 __autoreleasing295
16.4.4 __unsafe_unretained295
16.5 属性296
16.6 保留循环298
16.7 ARC和Core Foundation300
16.7.1 从方法返回的CF对象301
16.7.2 免费桥接301
16.8 与void*之间来回进行强制转换303
16.9 ARC和额外的自动释放池305
16.10 ARC和异常306
16.11 使用ARC306
16.11.1 Mac OS X上的ARC306
16.11.2 iOS上的ARC307
16.11.3 利用ARC生成程序307
16.12 ARC使用运行库函数308
16.13 更多信息309
16.14 小结309
16.15 练习310
第17章块312
17.1 函数指针313
17.1.1 利用函数指针调用函数314
17.1.2 使用函数指针315
17.1.3 使用函数指针的问题317
17.2 NSInvocation318
17.3 块320
17.3.1 块指针320
17.3.2 访问变量321
17.3.3 块变量323
17.3.4 块是基于栈的324
17.3.5 全局块324
17.3.6 块是Objective-C对象325
17.3.7 复制块325
17.3.8 块的内存管理326
17.3.9 捕获self327
17.3.10 陷阱329
17.3.11 块和ARC330
17.3.12 Cocoa中的块331
17.3.13 风格问题334
17.4 一些哲学上的限制334
17.5 小结335
17.6 练习335
第18章 额外的知识337
18.1 具有固定的底层类型的枚举337
18.1.1 设置底层类型338
18.1.2 NS_ENUM宏339
18.1.3 类型检查枚举339
18.1.4 利用枚举参数检查switch语句340
18.2 在@implementation块中不再需要方法的前置声明340
18.3 一些新文档343
18.4 小结343
18.5 练习343
第四部分 附  录
附录A 保留字和编译器指令346
附录B 免费桥接类348
附录C 32位和64位350
附录D 脆弱的基类问题354
附录E 用于Objective-C的资源355

教学资源推荐
作者: [加拿大] 马丁·P.罗毕拉德(Martin P. Robillard) 著
作者: 刘博 董学文 等编著
作者: (美)Byron S.Gottfried
作者: [美] 凯·霍斯特曼(Cay Horstmann) 著
参考读物推荐
作者: 吴惠茹 等编著
作者: 范怀宇 著
作者: [美] 戴维?朱利安(David Julian)著