具体描述
本书全面深入地介绍了使用Objective-C进行面向对象的软件开发方法,包括Objective-C运行时环境和重要的API,以及一些比较复杂的特性,并适时地穿插了一些有助于提高Objective-C编程效率的技巧。如果你已经具备一定Objective-C的基础知识,或者拥有C语言编程经验,本书就是一本可带你登堂入室的最合适的进阶指南。
作者简介
Keith Lee
资深苹果产品和软件开发专家。拥有二十多年的开发经验,主要从事移动设备、台式机和服务器端软件系统的设计和实现。当前的主攻方向是OS X和iOS平台以及新编程语言的软件开发。Keith Lee还是一位知名的作曲家,他的作品已被传播到多个国家。他与妻子和女儿居住在加利福尼亚,读者可通过ProObjectiveC@icloud.com与他联系。
目录信息
1.1 简介
1.1.1 苹果公司的Objective-C平台 1
1.1.2 选择Objective-C的原因 2
1.2 开发一个简单的Objective-C程序 3
1.2.1 新建工程 3
1.2.2 编写第一个Objective-C程序 7
1.3 小结 9
第2章 使用类 10
2.1 开发第一个类 10
2.1.1 向项目中添加一个类 10
2.1.2 编写Atom类的接口 12
2.1.3 编写实现Atom类的代码 13
2.2 实例变量 15
2.2.1 设置访问实例变量的方式 16
2.2.2 声明实例变量 16
2.2.3 访问实例变量 17
2.3 属性 17
2.3.1 属性声明 17
2.3.2 属性定义 18
2.3.3 由属性支持的实例变量 19
2.3.4 访问属性 19
2.4 方法 20
2.4.1 语法 20
2.4.2 调用方法 21
2.5 协议 21
2.6 分类 24
2.7 小结 27
第3章 对象和消息传递 28
3.1 创建对象 28
3.1.1 初始化对象 29
3.1.2 延伸Elements工程 30
3.2 发送消息 35
3.3 消息转发 36
3.3.1 转发选项 37
3.3.2 向Hydrogen类添加快速转发机制 3
3.4 小结 41
第4章 内存管理 43
4.1 程序的内存使用情况 43
4.2 Objective-C的内存模型 45
4.3 手动管理 45
4.3.1 对象引用和对象所有权 45
4.3.2 内存管理基本原则 45
4.3.3 使用MRR 48
4.4 使用自动引用计数 54
4.4.1 使用ARC的规则和约定 55
4.4.2 ARC的生命周期限定符 56
4.4.3 使用ARC 56
4.4.4 避免循环引用 60
4.5 小结 60
第5章 预处理器 62
5.1 概述 62
5.2 预处理器语言 63
5.2.1 指令 64
5.2.2 宏 71
5.3 小结 72
第6章 专家级技巧:使用ARC 74
6.1 ARC和对象所有权 74
6.1.1 声明对象的所有权 74
6.1.2 释放对象的所有权 75
6.2 扩展订单条目工程 76
6.3 将ARC与苹果公司提供的框架和服务一同使用 82
6.4 Objective-C直接桥接 83
6.5 使用ARC桥接转换 85
6.6 小结 89
第7章 运行时系统 90
7.1 动态功能 90
7.2 对象消息 90
7.2.1 选择器 92
7.2.2 方法签名 93
7.2.3 使用对象消息 94
7.3 动态类型 100
7.4 动态绑定 101
7.5 动态方法决议 102
7.6 动态加载 104
7.7 内省 105
7.8 小结 106
第8章 运行时系统的结构 107
8.1 运行时系统的组成部分 107
8.1.1 编译器 107
8.1.2 运行时系统库 112
8.2 与运行时系统交互 120
8.2.1 NSObject类的运行时方法 121
8.2.2 执行对象内省 121
8.3 小结 123
第9章 专家级技巧:使用运行时系统API 125
9.1 使用可选包扩展程序 125
9.1.1 方法 125
9.1.2 步骤1:编写基础代码 125
9.1.3 步骤2:创建一个可选包 128
9.1.4 步骤3:动态加载包 132
9.2 使用运行时系统API 138
9.2.1 定义方法的实现函数 140
9.2.2 创建并注册类 140
9.2.3 创建类实例 141
9.2.4 以动态方式向类实例添加变量 141
9.3 创建动态代理 142
9.3.1 创建Invoker协议 143
9.3.2 编写代理类 144
9.3.3 测试AspectProxy程序 147
9.4 小结 149
第10章 Foundation框架中的常用类 150
10.1 根类 150
10.1.1 NSObject协议 150
10.1.2 NSObject类 151
10.1.3 NSProxy类 153
10.2 字符串 153
10.2.1 NSString类 154
10.2.2 NSAttributedString类 157
10.2.3 NSString常量 157
10.2.4 格式化字符串 157
10.3 值对象 158
10.3.1 NSValue类 158
10.3.2 NSNumber类 158
10.3.3 NSDecimalNumber类 159
10.3.4 NSNumber常量 159
10.3.5 对日期和时间的支持 160
10.3.6 NSCache类 160
10.4 集合 161
10.4.1 NSArray类 161
10.4.2 NSPointerArray类 162
10.4.3 NSDictionary类 162
10.4.4 NSMapTable类 163
10.4.5 NSSet类 163
10.4.6 NSCountedSet类 163
10.4.7 NSHashTable类 163
10.4.8 NSPointerFunctions类 164
10.5 XML处理类 164
10.5.1 XML的DTD处理类 164
10.5.2 基于树形结构的XML处理类 164
10.5.3 事件驱动的XML处理类 165
10.6 谓词类 165
10.7 小结 166
第11章 Foundation框架中的系统服务 167
11.1 网络服务 167
11.1.1 NSHost类 167
11.1.2 Bonjour网络服务 167
11.2 应用服务 168
11.3 正则表达式和文本处理 168
11.4 文件系统实用程序 169
11.4.1 应用程序包 169
11.4.2 文件管理 170
11.4.3 数据流的输入输出 170
11.4.4 元数据查询 171
11.5 并发机制和线程 171
11.5.1 线程管理 171
11.5.2 并行操作 172
11.5.3 锁定 173
11.5.4 计时器和运行循环 173
11.5.5 创建Bonjour网络服务客户端 174
11.6 URL处理 178
11.6.1 URL加载 178
11.6.2 缓存管理 180
11.6.3 使用URL加载API下载资源 180
11.6.4 身份认证和证书管理 185
11.6.5 Cookie管理 186
11.6.6 协议支持 186
11.7 进程间通信 186
11.7.1 通过信道通信 187
11.7.2 通过端口通信 187
11.7.3 端口注册 187
11.8 小结 188
第12章 Foundation框架的专用服务 189
12.1 通知 189
12.2 归档和序列化 192
12.2.1 归档 192
12.2.2 属性列表序列化 193
12.2.3 归档对象图 195
12.3 分布式对象 204
12.4 脚本 205
12.5 小结 205
第13章 Foundation框架函数和数据类型 206
13.1 Foundation框架函数 206
13.1.1 断言 206
13.1.2 记录日志 209
13.1.3 包 209
13.1.4 十进制数值运算和字节排序 211
13.1.5 与运行时系统进行交互 214
13.1.6 文件路径 214
13.1.7 几何图形 215
13.2 数据类型 216
13.3 常数 216
13.4 小结 216
第14章 专家级技巧:错误处理 217
14.1 运行时错误情况 217
14.1.1 断言 217
14.1.2 错误编码 218
14.1.3 错误对象 218
14.1.4 异常 218
14.2 NSError类 218
14.2.1 使用错误对象 219
14.2.2 处理委托方法错误 221
14.2.3 通过间接方式创建错误对象 225
14.2.4 错误恢复 226
14.2.5 错误回应对象 227
14.2.6 NSError编码 227
14.3 异常处理 227
14.4 NSException类 228
14.4.1 异常和内存管理 229
14.4.2 执行异常处理 230
14.5 Foundation框架标准异常名称 232
14.6 错误处理指导原则 233
14.7 小结 234
第15章 块 235
15.1 块的语法 235
15.2 块就是闭包 239
15.2.1 词汇范围 239
15.2.2 可修改的__block变量 241
15.3 块的内存管理 241
15.4 使用块 243
15.4.1 使用块为数组排序 243
15.4.2 使用块加载URL 245
15.4.3 使用块的并行编程方式 248
15.5 小结 251
第16章 Objective-C常量 252
16.1 常量 252
16.2 NSNumber常量 253
16.3 容器常量 254
16.3.1 NSArray常量 254
16.3.2 NSDictionary常量 255
16.4 表达式常量 256
16.5 对象下标 257
16.5.1 NSArray对象的下标 257
16.5.2 NSDictionary对象的下标 258
16.6 自定义下标 259
16.7 使用自定义下标编辑寄存器值 260
16.8 小结 270
第17章 并发编程 272
17.1 并发编程的基本原则 272
17.1.1 并发处理的优势 273
17.1.2 实现并发处理 274
17.2 并行处理带来的挑战 274
17.3 共享数据 275
17.4 消息传递 276
17.5 在Objective-C中实现并发编程 276
17.6 语言特性 277
17.7 消息传递 278
17.8 线程 279
17.8.1 NSObject线程 279
17.8.2 NSThread 280
17.8.3 线程同步 281
17.9 使用线程实现并发处理 284
17.10 操作和操作队列 288
17.11 实现并发操作 291
17.12 使用操作队列实现并发处理 295
17.13 Grand Central Dispatch 298
17.14 为并发编程选择合适的API 301
17.15 小结 301
第18章 键值编程 303
18.1 键值编码 303
18.2 设计和实现KVC 306
18.2.1 键值编码API 307
18.2.2 键值搜索模式 308
18.2.3 属性访问方法的命名约定 308
18.2.4 一对多属性访问方法命名约定 309
18.2.5 键值检验 310
18.2.6 键值编码的集合操作符 311
18.3 键值观察 313
18.3.1 键值观察和通知 314
18.3.2 键值观察API 314
18.4 KVO的设计和实现 316
18.5 使用键值编程 316
18.6 小结 323
附录A 语言元素 325
附录B Xcode的配置功能 337
附录C 使用LLDB 353
· · · · · · (收起)
读后感
这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,很精典,也是我学习苹果开发的第二本书。后面的运行时系统和内存管理,等各方面都提到了。 这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,...
这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,很精典,也是我学习苹果开发的第二本书。后面的运行时系统和内存管理,等各方面都提到了。 这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,...
这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,很精典,也是我学习苹果开发的第二本书。后面的运行时系统和内存管理,等各方面都提到了。 这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,...
这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,很精典,也是我学习苹果开发的第二本书。后面的运行时系统和内存管理,等各方面都提到了。 这本书适合有一定编号经验的人阅读,如果没有就如同形而上学,不知所云。这本很好的书,...
英文版2013年的,xcode4.5,,前面几章时内容在新的xcode上都不适用了,有点内容一笔带过,算是不好不坏的,其他内容还好,有事例
用户评价
说实话,我本来对手册类的书籍总是抱持着一种敬而远之的态度,总觉得它们枯燥乏味,充斥着官方文档的腔调。但这本书完全打破了我的偏见。它的行文风格非常活泼且富有激情,读起来完全没有那种“在啃砖头”的感觉。作者似乎非常了解初学者在学习新语言时容易在哪里“卡壳”,因此总能在关键节点插入一些富有洞察力的“作者笔记”或者“陷阱提醒”。举个例子,在讲解Category和Protocol那一块时,它不仅展示了如何实现,还深入剖析了在实际项目分层设计中,如何合理利用这些特性来解耦代码,避免“上帝对象”的出现。这种理论与实践紧密结合的叙述方式,极大地提高了我的学习效率。我甚至发现,很多我在网上搜索了无数次才勉强理解的概念,在这本书里只需一两页的篇幅就能被阐述得清晰透彻。它就像是一位经验丰富的大神,手把手带着你穿梭于复杂的语法迷宫,时不时还会指出一条捷径,让人感觉学习过程充满了乐趣和成就感。
从工具链和开发环境的集成度来看,这本书的实用性评分可以打满分。它显然是站在一个资深开发者的角度来撰写的,深知新手的痛点不仅仅在于代码本身,还在于如何与Xcode这个强大的IDE高效协作。书中对调试技巧的介绍,堪称是一部“Xcode使用秘籍”。不仅仅是断点设置,它详细演示了如何使用Expression窗口进行运行时变量监控,如何利用View Debugger深入剖析UI层级的渲染过程,甚至还花了专门的篇幅讲解了Instruments工具集在性能分析中的具体应用。尤其是针对Objective-C特有的一些运行时调试技巧,比如如何使用`po`命令查看对象的详细信息,以及如何利用LLDB的强大功能进行方法交换(Method Swizzling)的验证,这些都是平时自学很难系统掌握的“内功心法”。读完这一部分,我感觉自己对整个开发流程的掌控力提升了一个档次,不再是纯粹的“码农”,而更像是一个能够全面掌控开发环境的工程师。
这本书的深度,绝非市面上那些浅尝辄止的入门指南可比。它在进阶主题的处理上,展现出了极高的水准和对技术前沿的敏锐把握。我特别关注了它在并发编程部分的内容。在iOS开发的领域,GCD(Grand Central Dispatch)无疑是性能优化的核心武器,而这本书对GCD的讲解,简直是教科书级别的范本。它不满足于介绍`dispatch_queue_create`和`dispatch_async`这些基本API,而是深入探讨了并发模型的设计哲学,比如如何权衡串行队列和并发队列的使用场景,如何有效避免死锁,以及如何利用`dispatch_group`进行任务依赖管理。更让我印象深刻的是,作者甚至穿插讲解了底层线程同步机制的原理,使得读者在调用高级API时,内心深处对锁、原子操作的理解也是非常坚实的。这种从宏观到微观,层层递进的讲解方式,让我的技术视野得到了极大的拓宽,不再满足于仅仅能跑起来的代码,而是开始追求代码的健壮性和极致的性能。
这本书在语言特性的阐述上,保持了一种罕见的平衡感——既尊重历史,又拥抱未来。作为Objective-C的学习资料,它当然需要详尽地介绍Objective-C的C语言基础、小对象(id)的魔力以及消息传递机制(Message Passing)。但真正高明之处在于,它并没有将Objective-C固步自封在过去,而是巧妙地将Swift的出现及其带来的影响融入到了讲解中。例如,在讨论Objective-C的桥接和互操作性时,它不仅仅是展示了如何编写兼容Swift的头文件,更是在分析未来趋势下,如何合理规划一个混合项目的代码边界。这种对技术生态的宏观洞察,让这本书的价值超越了一本单纯的语言参考书。它提供的是一种与时俱进的编程思维,确保读者学到的知识不仅能立即应用到现有的老项目中,更能为迎接未来的技术迭代做好充分的心理和技术准备,确保学习曲线的平稳和长远的竞争力。
这本书的封面设计真是抓人眼球,那种深沉的蓝和明亮的橙色搭配在一起,立刻就让人联想到编程世界里的严谨与活力。我拿到手的时候,首先被它的装帧质量所震撼,纸张厚实,印刷清晰,即便是长时间翻阅,也不会感到眼睛疲劳。内容上,我最欣赏它对基础概念的构建,简直就像是为新手量身定做的蓝图。它没有一上来就堆砌复杂的术语和晦涩难懂的代码片段,而是循序渐进地引导我们理解面向对象编程的核心思想在Objective-C这座大厦中是如何运作的。特别是关于内存管理的章节,作者用极其生动的比喻和清晰的图示,将ARC(自动引用计数)的生命周期讲解得淋漓尽致,让我这个曾经在内存泄漏问题上焦头烂额的开发者,豁然开朗。这本书的优势在于它的“打地基”工作做得太扎实了,一旦把这些底层逻辑搞明白,后面学习任何新的框架或者库,都会感到游刃有余,不再是零散知识点的堆砌,而是一个结构完整的知识体系。它教会我的不仅仅是“怎么写代码”,更是“为什么要这样写代码”的底层哲学。
精通Object-C
精通Object-C
一知半解……
复习用,有开发经验后看这本书
知识点很全,书的结构合理。就是翻译的太差,很多知识点都明白,也读的费力。