下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > 移动开发 >IOS > Objective-C 2.0 Mac和iOS开发实践指南

Objective-C 2.0 Mac和iOS开发实践指南

综合评级:★★★★★

定价:79.00

作者:(美)克莱尔 著,陈宗斌 等译

出版社:机械工业出版社

出版日期:2015年1月

页数:357

ISBN:9787111484561

书籍介绍
《Objective-C 2.0 Mac和iOS开发实践指南》全书分为四部分,共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 Mac和iOS开发实践指南》内容精练、可读性强、易于学习,侧重通过示例来介绍知识点和概念,是一本学习Objective-C 2.0不可多得的入门实践指南。本书适合想要学习Objective-C 2.0编程语言的初、中级程序员阅读,也可以作为社会培训机构的入门级培训教辅材料。

相关课程
目录

第1版赞誉

译者序

前言

致谢

第一部分 Objective-C简介

第1章 C语言--Objective-C的基础

1.1C程序的结构

1.1.1main例程

1.1.2格式化

1.1.3注释

1.1.4变量和函数名称

1.1.5 命名约定

1.1.6 文件

1.2 变量

1.2.1 整型

1.2.2 浮点型

1.2.3 真值

1.2.4 初始化

1.2.5 指针

1.2.6 数组

1.2.7 多维数组

1.2.8 字符串

1.2.9 结构

1.2.10 typedef

1.2.11 枚举常量

1.3 运算符

1.3.1 算术运算符

1.3.2 余数运算符

1.3.3 递增和递减运算符

1.3.4 优先级

1.3.5 取负运算符

1.3.6 比较运算符

1.3.7 逻辑运算符

1.3.8 逻辑"非"运算符

1.3.9 赋值运算符

1.3.10 转换和强制转换

1.3.11 其他赋值运算符

1.4 表达式和语句

1.4.1 表达式

1.4.2 表达式求值

1.4.3 语句

1.4.4 复合语句

1.5 程序流程

1.5.1 if语句

1.5.2 条件表达式

1.5.3 while语句

1.5.4 do-while循环

1.5.5 for语句

1.5.6 break语句

1.5.7 continue语句

1.5.8 逗号表达式

1.5.9 switch语句

1.5.10 goto语句

1.5.11 函数

1.5.12 声明函数

1.6 预处理器

1.6.1 包括文件

1.6.2 #define

1.6.3 条件编译

1.6.4 printf

1.7 命令行编译和调试

1.8 小结

1.9 练习

第2章 关于C变量的更多知识

2.1 C程序的内存布局

2.2 自动变量

2.3 外部变量

2.4 声明关键字

2.4.1 auto

2.4.2 extern

2.4.3 static

2.4.4 register

2.4.5 const

2.4.6 volatile

2.5 作用域

2.5.1 自动变量的作用域

2.5.2 复合语句和作用域

2.5.3 外部变量的作用域

2.6 动态分配

2.7 小结

2.8 练习

第3章 面向对象程序设计简介

3.1 面向对象程序设计

3.1.1 类和实例

3.1.2 方法

3.1.3 封装

3.1.4 继承

3.1.5 多态性

3.1.6 面向对象语言的主要特点是什么

3.2 Objective-C简介

3.2.1 定义类

3.2.2 使用类名作为类型

3.2.3 消息传递(调用方法)

3.2.4 类对象和对象创建

3.2.5 内存管理

3.3 Objective-C的增补功能

3.3.1 运行库

3.3.2 名称

3.3.3 消息表达式

3.3.4 编译器指令

3.3.5 字面量字符串

3.3.6 Objective-C的关键字

3.3.7 框架

3.3.8 框架数值类型

3.4 小结

第4章 你的第一个Objective-C程序

4.1 利用xcode构建程序

4.2 Objective-C的程序结构

4.3 面向对象的"Hello World"

4.3.1 Greeter.h

4.3.2 Greeter.m

4.4 main.m

4.5 小结

4.6 练习

第二部分 语 言 基 础

第5章 消息传递

5.1 方法

5.1.1 一个简单的方法

5.1.2 带有参数的方法

5.2 消息传递

5.3 消息传递的细节

5.3.1 嵌套

5.3.2 消息传递nil

5.3.3 把消息发送给self

5.3.4 重写并给super发送消息

5.3.5 选择器

5.3.6 具有相同名称的方法

5.3.7 动态和静态类型化

5.4 幕后的工作原理

5.5 消息转发

5.6 效率

5.7 内省及其他运行库趣事

5.8 小结

5.9 练习

第6章 类和对象

6.1 定义类

6.1.1 接口部分

6.1.2 @class指令

6.1.3 实现部分

6.1.4 导入

6.2 子类化一个类

6.2.1 定义子类

6.2.2 子类化的示例

6.2.3 类层次结构

6.2.4 类层次结构示例

6.2.5 抽象类

6.3 创建对象

6.3.1 对象分配

6.3.2 对象初始化

6.4 销毁对象

6.5 复制对象

6.5.1 浅复制和深复制

6.5.2 可变复制和不可变复制

6.5.3 在自己的类中实现复制

6.6 小结

6.7 练习

第7章 类对象

7.1 类对象

7.1.1 Class类型

7.1.2 类方法

7.2 其他类方法

7.2.1 便利构造函数

7.2.2 单例

7.2.3 初始化类

7.3 模拟类变量

7.4 小结

7.5 练习

第8章 框架

8.1 框架是什么

8.2 Cocoa和Cocoa Touch

8.2.1 OS X

8.2.2 iOS

8.3 appKit

8.4 UIKit

8.5 Core Foundation框架

8.5.1 Core Foundation对象的内存管理

8.5.2 免费桥接

8.6 Core Graphics

8.7 Core Animation

8.8 Apple提供的其他框架

8.9 第三方框架

8.10 幕后的工作原理

8.11 小结

第9章 常用的Foundation类

9.1 不可变类和可变类

9.2 类簇

9.3 NSString

9.3.1 NSString示例

9.3.2 在C字符串与NSString之间来回转换

9.3.3 NSMutableString

9.3.4 字面量字符串

9.4 集合类

9.4.1 NSArray

9.4.2 NSDictionary

9.4.3 NSSet

9.5 NSNumber

9.6 NSNull

9.7 NSData

9.7.1 访问NSData的字节

9.7.2 在文件与NSData之间转移内容

9.8 NSURL

9.9 Objective-C字面量和对象下标

9.9.1 NSArray字面量

9.9.2 NSDictionary字面量

9.9.3 NSNumber字面量

9.9.4 装箱表达式

9.9.5 对象和下标

9.9.6 给自己的类添加下标

9.10 结构

9.11 iOS上的几何结构

9.12 小结

9.13 练习

第10章 Objective-C中的控制结构

10.1 if语句

10.2 for语句和隐式循环

10.2.1 for语句

10.2.2 隐式循环

10.2.3 带有块的隐式循环

10.3 while语句和NSEnumerator

10.4 快速枚举

10.5 使用快速枚举的示例

10.6 异常

10.6.1 抛出你自己的异常

10.6.2 多个@catch块

10.6.3 嵌套的异常处理

10.6.4 使用异常

10.6.5 你应该使用异常吗

10.7 小结

10.8 练习

第11章 类别、扩展和安全

11.1 类别

11.1.1 利用类别重写方法

11.1.2 类别的其他用途

11.2 关联引用

11.3 扩展

11.4 实例变量作用域(访问控制)

11.5 隐藏实例变量声明

11.6 针对方法的访问控制

11.7 命名空间

11.8 安全

11.9 从Objective-C中调用C函数

11.9.1 技术部分

11.9.2 实践部分

11.9.3 哲学部分

11.10 小结

11.11 练习

第12章 属性

12.1 在对象外面访问实例变量(不要这样做)

12.2 声明和实现访问器

12.3 使用属性的访问器

12.4 合成的实例变量

12.5 默认使用@synthesize

12.6 合成总结

12.6.1 显式声明

12.6.2 默认的合成方式

12.7 私有属性

12.8 @property语句

12.8.1 assign、retain和copy

12.8.2 readwrite和readonly

12.8.3 nonatomic

12.8.4 setter=name和getter=name

12.8.5 attributes和@dynamic

12.9 关于@dynamic的更多知识

12.10 没有实例变量的属性

12.11 属性和内存管理

12.12 提前探讨自动引用计数(ARC)

12.12.1 strong

12.12.2 weak

12.12.3 unsafe_unretained

12.13 子类化和属性

12.14 用于readonly属性的隐藏的设置器

12.15 属性作为文档

12.16 点语法

12.16.1 点语法和属性

12.16.2 点语法和C结构

12.17 小结

12.18 练习

第13章 协议

13.1 协议的理论基础

13.2 使用协议

13.2.1 声明协议

13.2.2 采用协议

13.2.3 协议作为类型

13.2.4 属性和协议

13.3 TablePrinter示例

13.3.1 TablePrinterDataSource

13.3.2 TablePrinter

13.3.3 FruitBasket

13.3.4 main

13.3.5 一个问题

13.3.6 实现可选方法

13.4 协议对象和一致性测试

13.5 非正式协议

13.6 小结

13.7 练习

第三部分 高 级 概 念

第14章 内存管理概述

14.1 问题

14.2 解决方案:Objective-C内存管理

14.2.1 引用计数(手动引用计数)

14.2.2 自动引用计数(ARC)

14.3 继续学习下面的内容

第15章 引用计数

15.1 引用计数的基础知识

15.2 接收对象

15.3 所有权

15.4 dealloc

15.5 返回对象

15.5.1 自动释放

15.5.2 自动释放池

15.5.3 管理自动释放池

15.5.4 回到便利构造函数上来

15.5.5 自动释放和iOS

15.5.6 使用额外的自动释放池控制内存使用

15.6 retainCount

15.7 多线程

15.8 何时保留计数会出错

15.9 保留循环

15.10 最后说再见:曲终人散时

15.11 小结

15.12 练习

第16章 ARC

16.1 ARC是什么,不是什么

16.2 ARC的工作方式

16.3 ARC会强加一些规则

16.3.1 你不能自己调用内存管理方法

16.3.2 ARC和dealloc

16.3.3 方法命名约定

16.3.4 ARC需要看到方法声明

16.3.5 Objective-C指针和C结构

16.4 新的变量修饰符

16.4.1 __strong

16.4.2 __weak

16.4.3 __autoreleasing

16.4.4 __unsafe_unretained

16.5 属性

16.6 保留循环

16.7 ARC和Core Foundation

16.7.1 从方法返回的CF对象

16.7.2 免费桥接

16.8 与void*之间来回进行强制转换

16.9 ARC和额外的自动释放池

16.10 ARC和异常

16.11 使用ARC

16.11.1 Mac OS X上的ARC

16.11.2 iOS上的ARC

16.11.3 利用ARC生成程序

16.12 ARC使用运行库函数

16.13 更多信息

16.14 小结

16.15 练习

第17章 块

17.1 函数指针

17.1.1 利用函数指针调用函数

17.1.2 使用函数指针

17.1.3 使用函数指针的问题

17.2 NSInvocation

17.3 块

17.3.1 块指针

17.3.2 访问变量

17.3.3 块变量

17.3.4 块是基于栈的

17.3.5 全局块

17.3.6 块是Objective-C对象

17.3.7 复制块

17.3.8 块的内存管理

17.3.9 捕获self

17.3.10 陷阱

17.3.11 块和ARC

17.3.12 Cocoa中的块

17.3.13 风格问题

17.4 一些哲学上的限制

17.5 小结

17.6 练习

第18章 额外的知识

18.1 具有固定的底层类型的枚举

18.1.1 设置底层类型

18.1.2 NS_ENUM宏

18.1.3 类型检查枚举

18.1.4 利用枚举参数检查switch语句

18.2 在@implementation块中不再需要方法的前置声明

18.3 一些新文档

18.4 小结

18.5 练习

第四部分 附  录

附录A 保留字和编译器指令

附录B 免费桥接类

附录C 32位和64位

附录D 脆弱的基类问题

附录E 用于Objective-C的资源

前言
Objective-C是C语言的面向对象扩展,可以称为“带有对象的C”。如果你正在阅读本书,就可能对学习Objective-C感兴趣,以便可以为MacOSX或iOS编写应用程序。但是,学习Objective-C还有另一个理由:它是一门有趣的语言,并且相对容易学习。像现实世界中的其他任何事物一样,学习Objective-C也有一些难点。但是总体而言,它比其他面向对象语言要简单得多,特别是和C++相比就更是如此。Objective-C对C语言所进行的增补可以在一两页中列举出来。

  Objective-C最初是由BradJ.Cox于20世纪80年代早期创建的。在1988年,由SteveJobs在离开Apple后创建的NeXTComputer公司许可使用Objective-C,并使之成为用于创建在NeXT的NeXTSTEP操作系统下运行的应用程序的开发环境的基础。NeXT工程师开发了一组Objective-C库,用于构建应用程序。在NeXT于1993年从硬件业务中全身而退之后,它与SunMicrosystems合作创建了OpenStep,这是一种针对面向对象系统的开放性规范,并且基于NeXTSTEPAPI。Sun最终失去了对OpenStep的兴趣。NeXT继续销售其OpenStep版本,直到Apple于1997年早期收购了它为止,NeXTSTEP操作系统也随之变成了OSX的基础。

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

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

  关于本书

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

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

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

  本书读者对象

  本书适合于那些先前具有一些编程经验并且想要学习Objective-C以便为OSX或iOS编写程序的人阅读(iOS用于iPhone、iPodtouch和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-C2.0是它们推出的最高版本。指定语言的特定版本或特性集的唯一方式是:在提及Objective-C时,带上Xcode或LLVM编译器的特定版本。本书这一版介绍的是截止到Xcode4.4(随同OSX10.8MountainLion一起发布)的Objective-C,或者相当于在LLVMCompiler/Clang4.0中实现的Objective-C。

  是否使用ARC

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

  2011年春季,Apple引入了ARC(AutomaticReferenceCounting,自动引用计数)。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)是面向对象程序设计的主要实体;它们把变量(称为实例变量(instancevariable))和类似于函数的代码块(称为方法(mothod))组织到单个实体中。类是对象的规范,它列出了组成给定类型的对象的实例变量和方法,并且提供了实现这些方法的代码。对象更加具体,它是一个内存区域,类似于C语言的结构,用于保存由对象的类所定义的变量。一个特定的对象被称为定义它的类的一个实例。

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

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

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

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

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

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

  第10章讨论当使用带有C语言控制结构的Objective-C构造时,需要考虑的额外一些问题。该章继续介绍Objective-C所添加的额外的控制结构,包括Objective-C2.0的快速枚举(FastEnumeration)构造。该章最后解释Objective-C的异常处理系统。

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

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

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

  第三部分:高级概念

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

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

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

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

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

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

  第四部分:附录

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

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

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

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

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

  读者服务

  ……

热门图书
推荐新闻
技术文库
论坛推荐