Objective-C编程全解(第3版)
查字典图书网
当前位置: 查字典 > 图书网 > 编程> Objective-C编程全解(第3版)

Objective-C编程全解(第3版)

Objective-C编程全解(第3版)

7.6

作者: [日] 荻原刚志
出版社: 人民邮电出版社
译者: 唐 璐  |  翟俊杰
出版年: 2014-12
页数: 460
定价: 79.00元
装帧: 平装
ISBN: 9787115377197

我要收藏

内容简介:

本书结合理论知识和实例程序,全面而系统地介绍了Objective-C 编程的相关内容,包括类和继承、对象的类型和动态绑定、基于引用计数的内存管理、垃圾回收、属性声明、类NSObject 和运行时系统、Foundation 框架中常用的类、范畴、抽象类与类簇、对象的复制及存储、块对象、消息发送模式、图像视图、异常和错误、并行编程、键值编码等。

本书适合iOS 应用和Mac OS X 开发初学者系统入门、有经验的开发者深入理解语言本质,也适合开发团队负责人、项目负责人作为综合性的Objective-C 参考书阅读。

作者简介:

作者简介:

荻原刚志

大阪大学工学博士毕业。京都产业大学计算机理工学院教授,大阪大学客座教授。主要从事软件开发手法、隐写术等方面的研究。其本人也是应用软件开发者,代表作品有ToyViewer、Typist等。

译者简介:

唐璐

硕士毕业于东北大学,2005年赴日,曾就职于东京PtoPA、东软日本,在日期间曾参与多个iOS和人工智能的项目。现就职于阿里巴巴无线事业部,从事NLP方面的研究和开发工作。

翟俊杰

毕业于吉林大学和北京邮电大学 研究方向为模式识别和智能系统。先后任职于东京PtoPA、北京腾讯科技和北京搜狗科技有限公司,主要从事NLP、数据质量、数据挖掘方面的研究和开发。

目录:

第1章 面向对象的编程1

1.1 对象的概念2

1.1.1 面向功能的软件设计的局限性2

1.1.2 面向对象的模块化2

1.1.3 消息传递3

1.1.4 模块的抽象化4

1.1.5 对象的属性5

专栏 面向对象的方方面面5

1.1.6 类6

专栏 Cocoa和Objective-C的历史8

1.2 模块和对象8

1.2.1 软件模块8

1.2.2 高独立性的模块9

1.2.3 模块的信息隐蔽9

1.2.4 类的定义和接口10

1.2.5 消息发送的实现10

专栏 C语言的新标准11

第2章 Objective-C程序设计 13

2.1 对象和消息14

2.1.1 消息表达式14

2.1.2 消息选择器15

2.1.3 实例变量的生成和初始化16

2.2 类的定义17

2.2.1 类的接口声明17

专栏 各种各样的布尔类型18

专栏 不指定方法的返回值18

2.2.2 类的实现19

2.2.3 一个遥控器的例子19

2.3 编译21

2.3.1 简单的编译方法21

2.3.2 多文件编译23

2.4 程序的书写风格24

2.4.1 混合编程24

2.4.2 C语言函数的使用方法25

2.4.3 静态变量的定义26

2.4.4 头文件的引入26

专栏 参考文档和SDK27

专栏 Xcode的安装28

第3章 类和继承 29

3.1 继承的概念30

3.1.1 父类和子类30

3.1.2 类的层次结构31

3.2 利用继承定义新类32

3.2.1 继承的定义32

3.2.2 类定义和头文件33

3.2.3 继承和方法调用34

3.2.4 调用父类的方法34

3.2.5 初始化方法的定义35

3.3 使用继承的程序示例36

3.3.1 追加新方法的例子36

3.3.2 方法重写的例子37

3.4 继承和方法调用38

3.4.1 使用self调用方法38

3.4.2 使用super调用方法39

3.4.3 测试程序40

3.5 方法定义时的注意事项41

3.5.1 局部方法41

3.5.2 指定初始化方法42

专栏 Objective-C与开源软件44

第4章 对象的类型和动态绑定 45

4.1 动态绑定46

4.1.1 什么是动态绑定46

4.1.2 多态47

4.2 作为类型的类48

4.2.1 把类作为一种类型48

4.2.2 空指针nil49

专栏 关系表达式50

4.2.3 静态类型检查51

4.2.4 静态类型检查的总结53

4.3 编程中的类型定义54

4.3.1 签名不一致时的情况54

专栏 重载55

4.3.2 类的前置声明56

4.3.3 强制类型转换的使用示例57

4.4 实例变量的数据封装58

4.4.1 实例变量的访问权限58

4.4.2 访问器60

4.4.3 实例变量的可见性61

4.4.4 在实现部分中定义实例变量62

4.5 类对象63

4.5.1 什么是类对象63

4.5.2 类对象的类型64

4.5.3 类方法的定义65

4.5.4 类变量65

4.5.5 类对象的初始化66

4.5.6 初始化方法的返回值68

第5章 基于引用计数的内存管理 69

5.1 动态内存管理70

5.1.1 内存管理的必要性70

5.1.2 引用计数、自动引用计数和自动垃圾回收70

5.2 手动引用计数内存管理71

5.2.1 引用计数71

5.2.2 测试引用计数的例子73

5.2.3 释放对象的方法74

5.2.4 访问方法和对象所有权75

专栏 静态对象75

5.2.5 自动释放76

5.2.6 使用自动释放池时需要注意的地方77

5.2.7 临时对象的生成77

5.2.8 运行回路和自动释放池78

5.2.9 常量对象78

专栏 常量修饰符const79

5.3 分数计算器的例子80

5.3.1 分数类Faction80

5.3.2 保存计算结果的FracRegister类83

5.3.3 主函数和执行示例85

5.4 ARC概要88

5.4.1 什么是ARC88

5.4.2 禁止调用引用计数的相关函数89

5.4.3 管理自动释放池的新语法90

5.4.4 变量的初始值90

5.4.5 方法族90

5.4.6 方法dealloc的定义92

5.4.7 使用ARC的程序的编译93

5.4.8 ARC的基本注意事项94

5.4.9 使用ARC重构分数计算器94

5.5 循环引用和弱引用95

5.5.1 循环引用95

5.5.2 所有权和对象间的关系96

5.5.3 弱引用97

5.5.4 自动nil化的弱引用98

5.5.5 对象之间引用关系的基本原则99

5.6 ARC编程时其他一些注意事项100

5.6.1 可以像通常的指针一样使用的对象100

5.6.2 setter方法的注意事项101

5.6.3 通过函数的参数返回结果对象102

5.6.4 C语言数组保存Objective-C对象103

5.6.5 ARC对结构体的一些限制105

5.6.6 提示编译器进行特别处理106

第6章 垃圾回收 107

6.1 垃圾回收的概要108

6.1.1 查找不再使用的对象108

6.1.2 编程时的注意事项109

6.1.3 垃圾收集器110

6.1.4 finalize方法的定义111

6.1.5 编译时的设定112

6.1.6 引用计数管理方式中方法的处理113

6.1.7 使用垃圾回收编程小结114

6.2 垃圾回收的详细功能114

6.2.1 分代垃圾回收114

6.2.2 弱引用115

6.2.3 自动nil化115

6.2.4 通过垃圾回收回收动态分配的内存116

6.2.5 _ _strong修饰符的使用方法117

6.2.6 NSGarbageCollector类117

6.2.7 实时API118

6.3 内存管理方式的比较119

6.3.1 引用计数和垃圾回收119

6.3.2 更改内存管理方式120

6.3.3 各种内存管理方式的比较120

第7章 属性声明 123

7.1 属性是什么124

7.1.1 使用属性编程124

7.1.2 属性的概念125

专栏 内省125

7.2 属性的声明和功能126

7.2.1 显式声明属性126

7.2.2 属性的实现127

7.2.3 @synthesize和实例变量129

7.2.4 通过@synthesize生成实例变量130

7.2.5 给属性指定选项131

7.2.6 赋值时的选项132

7.2.7 原子性134

7.2.8 属性声明和继承135

7.2.9 方法族和属性的关系135

7.3 通过点操作符访问属性136

7.3.1 点操作符的使用方法136

7.3.2 复杂的点操作符的使用方法137

7.3.3 何时使用点操作符139

第8章 类NSObject和运行时系统 141

8.1 类NSObject142

8.1.1 根类的作用142

8.1.2 类和实例142

8.1.3 实例对象的生成和释放143

8.1.4 初始化144

8.1.5 对象的比较144

8.1.6 对象的内容描述145

8.2 消息发送机制145

8.2.1 选择器和SEL类型145

8.2.2 消息搜索146

8.2.3 以函数的形式来调用方法147

专栏 函数指针148

8.2.4 对self进行赋值149

8.2.5 发送消息的速度149

8.2.6 类对象和根类152

8.2.7 Target-action paradigm153

8.2.8 Xcode中的动作方法和Outlet的写法155

8.3 Objective-C和Cocoa环境156

8.3.1 cocoa环境和Mac OS X156

8.3.2 Cocoa Touch和iOS156

8.3.3 框架157

8.3.4 框架的构成和头文件157

8.4 全新的运行时系统159

8.4.1 对64位的对应和现代运行时系统159

8.4.2 数据模型159

8.4.3 64位模型和整数类型159

8.4.4 Core Graphics的浮点数类型160

8.4.5 健壮实例变量161

专栏 条件编译162

第9章 Foundation框架中常用的类 163

9.1 对象的可变性164

9.1.1 可变对象和不可变对象164

9.1.2 可变对象的生成165

9.2 字符串类NSString166

9.2.1 常量字符串166

9.2.2 NSString167

9.2.3 NSMutableString174

9.3 NSData176

9.3.1 NSData176

9.3.2 NSMutableData178

9.4 数组类179

9.4.1 NSArray179

9.4.2 NSMutableArray183

9.4.3 数组对象的所有权184

9.4.4 快速枚举185

9.4.5 枚举器NSEnumerator186

9.4.6 快速枚举和枚举器187

9.4.7 集合类188

9.5 词典类189

9.5.1 NSDictionary191

9.5.2 NSMutableDicitionary193

9.6 包裹类194

9.6.1 NSNumber194

9.6.2 NSValue196

9.6.3 类型编码和@encode()196

9.6.4 NSNull197

9.7 NSURL198

9.7.1 关于URL198

9.7.2 NSURL的概要199

9.7.3 使用NSURL来访问资源201

第10章 范畴 203

10.1 范畴204

10.1.1 范畴204

10.1.2 范畴和文件的组织205

10.1.3 作为子模块的范畴206

10.1.4 方法的前向声明207

10.1.5 私有方法208

10.1.6 类扩展209

10.1.7 范畴和属性声明210

10.2 给现有类追加范畴211

10.2.1 追加新的方法211

10.2.2 追加方法的例子212

专栏 可变参数的方法的定义213

10.2.3 覆盖已有的方法214

10.3 关联引用215

10.3.1 关联引用的概念215

10.3.2 添加和检索关联215

10.3.3 对象的存储方法216

10.3.4 断开关联217

10.3.5 利用范畴的例子217

第11章 抽象类和类簇 221

11.1 抽象类222

11.1.1 什么是抽象类222

11.1.2 抽象类的例子223

11.2 类簇228

11.2.1 类簇的概念228

11.2.2 测试程序229

11.2.3 编程中的注意事项230

11.3 生成类簇的子类231

11.3.1 使用范畴231

11.3.2 基本方法的重定义231

11.3.3 生成字符串的子类233

第12章 协议235

12.1 协议的概念236

12.1.1 什么是协议236

12.1.2 对象的协议236

12.2 Objective-C中协议的声明238

12.2.1 协议的声明238

12.2.2 协议的采用239

12.2.3 协议的继承240

12.2.4 指定协议的类型声明240

12.2.5 协议的前置声明241

12.2.6 协议适用性检查241

12.2.7 必选功能和可选功能242

12.2.8 使用协议的程序示例242

专栏 类的多重继承245

12.3 非正式协议246

12.3.1 什么是非正式协议246

12.3.2 非正式协议的用途246

专栏 使用宏(macro)来区分系统版本的差异247

第13章 对象的复制及存储249

13.1 对象的复制250

13.1.1 浅复制和深复制250

13.1.2 区域251

13.1.3 复制方法的定义251

13.1.4 复制方法的例子252

13.1.5 实现可变复制254

13.2 归档255

13.2.1 对象的归档255

13.2.2 Foundation框架的归档功能255

13.2.3 归档方法的定义256

13.2.4 归档的方法定义257

13.2.5 归档和解档的初始化方法258

13.3 属性表259

13.3.1 属性表概况259

13.3.2 ASCII码格式属性表260

13.3.3 XML格式属性表261

13.3.4 属性表的变换和检查261

第14章 块对象 263

14.1 什么是块对象264

14.1.1 C编译器和GCD264

14.1.2 块对象的定义264

14.1.3 块对象和类型声明266

14.1.4 块对象中的变量行为267

14.1.5 排序函数和块对象269

14.2 块对象的构成271

14.2.1 块对象的实例和生命周期271

14.2.2 应该避免的编码模式273

14.2.3 块对象的复制273

14.2.4 指定特殊变量_ _block274

14.3 Objective-C和块对象276

14.3.1 方法定义和块对象276

14.3.2 作为Objective-C对象的块对象276

14.3.3 ARC和块对象277

14.3.4 对象内变量的行为277

14.3.5 集合类中添加的方法279

14.3.6 在窗体中使用块对象280

14.3.7 ARC中使用块对象时的注意事项281

第15章 消息发送模式 283

15.1 应用和运行回路284

15.1.1 运行回路284

15.1.2 定时器对象285

15.1.3 消息的延迟执行286

15.2 委托286

15.2.1 委托的概念286

15.2.2 Cocoa环境中的委托287

15.2.3 委托的设置和协议288

15.2.4 使用委托的程序289

15.3 通知289

15.3.1 通知和通知中心的概念289

15.3.2 通知对象290

15.3.3 通知中心291

15.3.4 通知队列293

专栏 通知名或异常名的定义294

15.4 反应链294

15.4.1 反应链概述294

15.4.2 应用中的反应链295

15.5 消息转送296

15.5.1 消息转送的构成296

15.5.2 消息转送需要的信息296

15.5.3 消息转送的定义297

15.5.4 禁止使用消息298

15.5.5 程序示例298

15.6 撤销构造300

15.6.1 撤销构造的概念300

15.6.2 在撤销管理器中记录操作301

第16章 应用的构造 303

16.1 应用束304

16.1.1 应用束的构造304

16.1.2 nib文件和各语言资源305

专栏 指定语言和地区305

16.1.3 信息文件的主要内容306

16.1.4 通过NSBundle访问资源308

16.1.5 iOS中资源的访问310

16.1.6 通用二进制311

16.2 加载nib文件312

16.2.1 nib文件实例化312

16.2.2 在Mac OS X中加载nib文件313

16.2.3 在iOS中加载nib文件313

16.2.4 nib文件内的包含循环314

16.2.5 nib文件内对象的初始化314

16.2.6 启动应用314

16.3 iOS的文件保存场所316

16.3.1 主要目录及功能316

16.3.2 获取目录路径317

16.4 用户默认317

16.4.1 保存设定值317

16.4.2 默认域318

16.4.3 查找用户默认的工具319

16.4.4 NSUserDefaults概要319

16.5 应用的本地化321

16.5.1 消息的本地化321

16.5.2 本地化指针322

专栏 本地化应用名323

16.5.3 本地化323

专栏 消息内的语序324

16.6 模块的动态加载324

16.6.1 可加载束325

16.6.2 使用可加载束的程序325

16.6.3 插件概述326

专栏 沙盒(App Sandbox)327

第17章 实例:简单图像视图 329

17.1 Application框架和Interface Builder330

17.2 程序概况330

17.2.1 对象间的关系330

17.2.2 通知331

17.2.3 撤销和重做332

17.2.4 可加载束和本地化332

17.2.5 用户默认332

17.3 编程介绍333

17.3.1 main函数和MyViewerCtrl类333

17.3.2 类WinCtr336

17.3.3 类MyInspector341

17.4 应用束的组织345

17.4.1 创建编译和设置文件345

17.4.2 程序运行例子346

17.4.3 GUI定义文件和程序347

专栏 Objective-C调试器的功能349

第18章 异常和错误 351

18.1 异常352

18.1.1 异常处理的概念352

18.1.2 Objective-C中的异常处理352

18.2 异常处理机制概述353

18.2.1 异常句柄和异常处理域353

18.2.2 异常表示类NSException353

18.2.3 异常处理机制的语法354

18.2.4 简单的异常处理的示例程序355

专栏 日志输出函数NSLog()356

18.3 异常的发生和传播 357

18.3.1 异常的传播357

18.3.2 自己触发异常357

18.3.3 用 @throw语法产生异常357

18.3.4 @catch 的特殊语法 358

18.3.5 异常传播和 @finally 358

18.3.6 异常处理程序的注意点359

18.4 断言360

18.4.1 断言是什么360

18.4.2 断言宏361

专栏 包含可变个数的参数的宏361

18.5 错误处理362

18.5.1 错误处理结构的目的362

18.5.2 表示错误的类 NSError的使用方法362

18.5.3 获取错误对象的信息364

18.5.4 生成自定义错误对象364

18.6 错误反应链366

18.6.1 错误反应链的结构366

18.6.2 错误对象的更改和恢复367

专栏 单元测试369

第 19章 并行编程 371

19.1 多线程372

19.1.1 线程的基本概念372

19.1.2 线程安全372

19.1.3 注意点373

19.1.4 使用 NSThread创建线程373

19.1.5 当前线程374

19.1.6 GUI应用和线程374

19.2 互斥375

19.2.1 需要互斥的例子375

19.2.2 锁376

19.2.3 死锁377

19.2.4 尝试获得锁378

19.2.5 条件锁378

19.2.6 NSRecursiveLock379

19.2.7 @synchronized379

19.3 操作对象和并行处理380

19.3.1 新的并行处理程序380

19.3.2 使用NSOperation的处理概述381

19.3.3 NSOperation和NSOperationQueue的简单用法382

19.3.4 等待至聚合任务终止383

19.3.5 使用操作对象的简单例子383

19.3.6 NSInvocationOperation的使用方法385

19.3.7 NSBlockOperation 的使用方法385

19.3.8 NSBlockOperation中添加多个块对象386

19.3.9 设置任务间的依赖386

19.3.10 任务的优先级设置388

19.3.11 设定最大并行任务数388

19.3.12 终止任务389

19.3.13 设置队列调度为中断状态389

19.4 并行处理的示例程序390

19.4.1 程序概要390

19.4.2 类BrowsingViewerCtrl390

19.4.3 类BrowsingWinCtrl392

19.4.4 类DrawOperation394

19.4.5 其他改变396

19.5 使用连接的通信397

19.5.1 连接398

19.5.2 代理398

19.5.3 方法的指针参数399

19.5.4 对象的副本传递400

19.5.5 异步通信401

19.5.6 设置协议401

19.5.7 运行回路的开始402

19.5.8 收发消息时的处理402

19.5.9 线程间连接404

19.5.10 进程间连接406

19.5.11 进程间连接的例子407

第20章 键值编码 411

20.1 键值编码概况412

20.1.1 什么是键值编码412

20.1.2 键值编码的基本处理412

20.2 访问属性414

20.2.1 键值编码的方法的行为414

20.2.2 属性值的自动转换415

20.2.3 字典对象和键值编码416

20.2.4 根据键路径进行访问416

20.2.5 一对一关系和一对多关系417

20.2.6 数组对象和键值编码419

20.3 一对多关系的访问420

20.3.1 带索引的访问器模式420

20.3.2 一对多关系的可变访问421

20.4 KVC标准422

20.4.1 验证属性值422

20.4.2 键值编码的准则423

20.5 键值观察424

20.5.1 键值观察的基础424

20.5.2 示例程序426

20.5.3 一对多关系的属性监视429

20.5.4 依赖键的登记429

20.6 Cocoa绑定概述430

20.6.1 目标-行为-模式的弱点430

20.6.2 什么是Cocoa绑定430

20.6.3 Cocoa绑定所需的方法431

20.6.4 例题:绘制二次函数图的软件432

20.6.5 自定义视图的方法定义434

文章试读:3.2.1 继承的定义 如果想通过继承为某个类定义一个子类,该怎么办呢? Objective-C 在子类的接口部分声明继承关系。在 2.2节中我们已经说明了如何定义类的接口,这 里再介绍一遍。 定义父类 A 的子类 B 的时候,“类名”是新类 B,冒号后面的“父类名”是需要继承的类 A。 至此为止本书中的父类都使用了 NSObject,这是因为 Objective-C中所有的类...

(查看全部试读)

展开全文
随机来一本书

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

热门标签:
我想说两句
我要写长评
 想读     在读     读过   
评价:
标签(多个标签以“,”分开):