具体描述
《好学的Objective-C》共分为4部分。第一部分介绍了Objective—C的基础知识,包括Objective—C的基本语法、对象、内存管理等;第二部分深入挖掘Objective—C提供的一些功能,包括如何使用代码块,使用键值编码和键值观察,使用协议,扩展现有类的功能,编写宏以及处理错误和异常;第三部分介绍了Foundation框架及其相关知识;第四部分介绍了一些高级主题,包括多线程处理、Objective—C设计模式、利用NSCoder读写数据以及在其他平台上使用Objective—C等内容。
作者简介
Jiva DeVoe
拥 有25年的软件开发经验,是专门开发iPhone和Mac OS X 应用的Random Ideas软件公司的创始人,已有多个iPhone应用成为苹果广告中的推荐应用。此外,他还是Cocoa Touch for iPhone OS 3 Developer Reference的作者。他的博客地址为www.random-ideas.net。
目录信息
第一部分 Objective-C 简介
第1 章 Objective-C 简介 2
1.1 使用Xcode 进行开发 3
1.1.1 新建项目 3
1.1.2 项目文件 5
1.1.3 添加源码文件 6
1.1.4 主Xcode 窗口 7
1.2 理解编译过程 9
1.2.1 编码 9
1.2.2 源码、编译代码和可执行文件 11
1.2.3 查看应用包 11
1.2.4 编译设置 13
1.3 使用Xcode 静态分析器 17
1.4 Objective-C 运行时 20
1.5 小结 20
第2 章 基本语法 21
2.1 使用语句和表达式 23
2.1.1 声明变量 23
2.1.2 使用注释 25
2.1.3 标量类型 25
2.1.4 使用特殊变量修饰符 26
2.1.5 结构体 28
2.1.6 使用类型定义 29
2.1.7 使用enum 30
2.1.8 指针 31
2.1.9 使用运算符 35
2.1.10 三目运算符 37
2.2 使用函数 37
2.2.1 函数 37
2.2.2 定义函数 39
2.2.3 实现与接口 41
2.2.4 链接实现文件 42
2.3 控制程序流 43
2.3.1 使用条件语句 44
2.3.2 使用循环语句 47
2.4 活学活用 50
2.5 小结 53
第3 章 添加对象 54
3.1 对象 54
3.1.1 创建类 58
3.1.2 声明对象 64
3.1.3 调用对象方法 65
3.2 使用属性 66
3.2.1 状态和行为的区别 66
3.2.2 使用点标记 71
3.3 应用对象 72
3.3.1 创建员工对象 72
3.3.2 创建经理类 75
3.3.3 在HR 主函数中关联不同的类 77
3.4 小结 78
第4 章 Objective-C 内存管理 79
4.1 使用引用计数 79
4.1.1 内存管理规则 81
4.1.2 使用自动释放 82
4.1.3 对象内部的内存 85
4.2 使用垃圾回收 88
4.2.1 垃圾回收器 88
4.2.2 为项目配置垃圾回收 90
4.2.3 在垃圾回收项目中使用框架 91
4.3 关键的垃圾回收模式 92
4.3.1 管理有限的资源 92
4.3.2 编写支持垃圾回收的基础应用 94
4.3.3 处理nib 文件中的对象 94
4.3.4 强制垃圾回收 95
4.3.5 处理空指针和垃圾回收 95
4.3.6 使用垃圾回收的面向对象接口 96
4.4 项目使用的内存管理模型 97
4.5 小结 97
第二部分 更多特性
第5 章 代码块 100
5.1 了解代码块 100
5.1.1 声明代码块 100
5.1.2 使用代码块 102
5.2 了解重要的代码块作用域 103
5.2.1 管理代码块内存 104
5.2.2 通过typedef 提高代码块的可读性 105
5.3 在线程中使用代码块 106
5.3.1 使用GCD 106
5.3.2 使用GCD 在线程中调度代码块 106
5.4 通用的代码块设计模式 107
5.4.1 将代码块作为映射 107
5.4.2 在标准API 中使用代码块 108
5.5 在易并行任务中应用代码块 109
5.5.1 创建项目 109
5.5.2 在数组中使用代码块过滤素数 111
5.5.3 使用GCD 114
5.6 小结 116
第6 章 键值编码和键值观察 117
6.1 通过键值编码访问对象属性 117
6.1.1 键路径 119
6.1.2 编写符合KVC 标准的存取器方法 121
6.1.3 在数组中使用KVC 123
6.1.4 在结构体和标量中使用KVC 127
6.1.5 查找对象特性 128
6.2 观察对符合KVC 标准的值的修改 128
6.2.1 使用KVO 129
6.2.2 注册成为观察者 129
6.2.3 定义KVO 的回调 130
6.2.4 移除观察者 131
6.2.5 实现手动通知 132
6.2.6 使用KVO 的风险 133
6.3 应用键值观察 133
6.4 小结 136
第7 章 使用协议 137
7.1 优先使用组合而不是继承 137
7.1.1 了解为什么不需要(或不想要)多继承 139
7.1.2 理解协议如何解决问题 139
7.1.3 记录期望别人实现的接口 140
7.2 在对象中实现协议 141
7.2.1 声明协议 141
7.2.2 声明一个类实现了协议 143
7.2.3 声明一个必须实现协议的对象 143
7.2.4 正式协议和非正式协议 144
7.2.5 确定一个对象是否实现了可选方法 144
7.2.6 避免协议循环依赖 146
7.3 协议使用示例 146
7.4 小结 147
第8 章 扩展现有类 148
8.1 使用第三方框架和类 148
8.2 使用类别 149
8.2.1 声明类别 149
8.2.2 实现类别方法 150
8.2.3 在头文件中声明类别 150
8.2.4 使用类别 150
8.2.5 通过类别拆分功能 151
8.2.6 扩展类方法 151
8.2.7 分析类别的局限性 153
8.2.8 通过类别实现协议 153
8.2.9 了解在NSObject 上创建类别的风险 154
8.3 通过匿名类别扩展类 154
8.4 在现有类中关联变量 155
8.5 小结 157
第9 章 编写宏 158
9.1 回顾编译过程 158
9.2 定义宏 162
9.2.1 定义常量 163
9.2.2 通过编译传递常量 163
9.2.3 在宏中使用变量 165
9.2.4 字符串化 165
9.2.5 使用条件判断 167
9.2.6 使用内置宏 167
9.3 小结 167
第10 章 错误处理 168
10.1 错误分类 168
10.2 使用错误处理的不同机制 169
10.2.1 使用返回码 170
10.2.2 使用异常 171
10.2.3 使用NSError 176
10.3 小结 180
第三部分 使用 Foundation 框架
第11 章 了解框架之间如何配合工作 182
11.1 了解Foundation 框架 182
11.2 在项目中使用框架 184
11.2.1 添加框架 184
11.2.2 包含头文件 185
11.2.3 考虑垃圾回收 185
11.3 小结 185
第12 章 使用字符串 186
12.1 了解字符串声明语法 186
12.1.1 使用格式化字符串 188
12.1.2 使用其他NSString 方法 189
12.1.3 使用NSString 类别 190
12.2 小结 190
第13 章 使用集合 191
13.1 使用数组 191
13.1.1 使用字典 193
13.1.2 使用Set 集合 195
13.1.3 认识可变性 196
13.2 了解集合和内存管理 198
13.3 遍历 200
13.4 向元素发送消息 201
13.5 排序和过滤 201
13.6 在集合中使用代码块 203
13.7 小结 204
第14 章 使用NSValue、NSNumber和NSData 205
14.1 使用NSValue 和NSNumber 206
14.1.1 通过NSValue 包装任意数据类型 206
14.1.2 通过NSNumber 包装数字 207
14.1.3 通过NSDecimalNumber进行算术运算 207
14.2 使用NSData 和NSMutableData 208
14.2.1 创建NSData 对象 208
14.2.2 访问NSData 对象中的生数据 209
14.3 小结 209
第15 章 处理时间和日期 210
构建日期 211
使用时间间隔 211
日期比较 211
使用NSCalender 212
使用时区 213
15.1 使用NSDateFormatter 214
15.2 小结 214
第四部分 高级主题
第16 章 通过多个线程实现多处理 216
16.1 同步代码 217
16.1.1 使用锁 217
16.1.2 使用@synchronize 关键字 219
16.1.3 理解原子性 220
16.2 创建NSTread 221
16.2.1 创建线程 221
16.2.2 控制运行的线程 221
16.2.3 访问主线程 222
16.2.4 通过执行选择器跨线程 223
16.3 使用NSOperation 和NSOperationQueue 223
16.3.1 创建操作 224
16.3.2 将操作加入到队列 225
16.3.3 控制队列参数 225
16.3.4 使用不同的操作 226
16.4 小结 227
第17 章 Objective-C 设计模式 228
17.1 识别解决方案中的模式 228
17.2 用Objective-C 描述设计模式 229
17.2.1 使用单例 229
17.2.2 委托责任 233
17.2.3 将变化通知给多个对象 234
17.3 小结 237
第18 章 利用NSCoder 读写数据 238
在对象上实现NSCoding 协议 238
对象编码 238
基本类型编码 240
使用对象图 240
使用其他类型的数据 241
解码对象 242
18.1 使用NSArchiver 和NSUnarchiver 243
18.2 处理存档文件格式和遗留数据 244
18.3 小结 244
第19 章 在其他平台上使用Objective-C 245
19.1 使用GNUstep 245
19.1.1 使用Cocotron 247
19.1.2 使用其他开源库 248
19.2 展望未来 248
19.3 小结 249
· · · · · · (收起)
读后感
我是从图书馆借的这本书,看到第4章时被书中所揭示的深奥内存管理方式吓呆了,后来仔细一读,发现是翻译太差,语言晦涩,乍一读感觉OC的内存管理复杂程度超过了C,C++还有Java,还不如直接看官方文档。runtime直接翻译成“运行时”,在很多语境下让人感觉像回到了古代读没有标...
我是从图书馆借的这本书,看到第4章时被书中所揭示的深奥内存管理方式吓呆了,后来仔细一读,发现是翻译太差,语言晦涩,乍一读感觉OC的内存管理复杂程度超过了C,C++还有Java,还不如直接看官方文档。runtime直接翻译成“运行时”,在很多语境下让人感觉像回到了古代读没有标...
我是从图书馆借的这本书,看到第4章时被书中所揭示的深奥内存管理方式吓呆了,后来仔细一读,发现是翻译太差,语言晦涩,乍一读感觉OC的内存管理复杂程度超过了C,C++还有Java,还不如直接看官方文档。runtime直接翻译成“运行时”,在很多语境下让人感觉像回到了古代读没有标...
没有直接读原版,想着看翻译的会快些,结果... 十年前,读老谭《C语言程序设计》的不解再度袭来,这是要命的节奏啊,像 ”Objective-C 中的属性可以帮助你公开代表对象状态的对象属性。“ 。 ”对象由状态和行为组成。状态包括构成对象的数据。在考虑对象状态时,大多数开发人员...
翻译得有些晦涩,有些术语需要自己结合英文去理解,不过对初学又不想立刻阅读英文文档的人而言,可以作为一个了解和参考的教材。 读了几本Objective-C的翻译教材,发现不同的教材中对术语的叫法各有不同,这对学习或多或少有些影响。
用户评价
我必须承认,作者在语言风格上的幽默感确实为枯燥的编程学习增添了一抹亮色。书中不时穿插着一些与生活相关的比喻,试图将复杂的指针概念或运行时(Runtime)的消息转发机制“拟人化”。比如,用“送信人”和“接收者”来比喻消息发送和处理的过程,初看之下很有趣。然而,这种风格在涉及到Foundation框架中那些非常底层、对精度要求极高的部分时,反而成了一种障碍。当读到关于`NSRunLoop`的解析时,我发现作者为了保持轻松的叙述基调,简化了RunLoop的五种运行模式(Source, Timer, Observers)的精确定义和切换条件。对于一个希望精确控制应用在后台运行逻辑、避免卡死或资源泄露的资深开发者来说,这种模糊的处理方式是无法接受的。我真正需要的,是RunLoop在处理`UITrackingRunLoopMode`和`Default`模式切换时的具体源码级别的解释,而不是一个“别担心,系统会搞定的”的宽慰。这本书更适合完全零基础的人建立兴趣,但对于进阶者,这种过度简化的叙事会让你错过关键的技术细节。
这本书在数据持久化方面的介绍,主要集中在Core Data的入门配置上。它详细演示了如何通过Xcode的Data Model编辑器创建实体、定义属性,并成功地执行基本的增删改查(CRUD)操作。对于那些刚刚接触iOS开发,需要一个可靠的本地数据库解决方案的读者来说,这部分内容是合格的。但是,我的期望是能看到更多关于Core Data的性能调优策略,尤其是在处理上万条记录的列表视图时可能遇到的内存峰值问题。书中几乎没有提及如何有效地使用`NSFetchedResultsController`进行增量更新,也没有深入探讨在多线程环境下,如何安全地管理`NSManagedObjectContext`的生命周期,比如是应该为每个线程创建一个Context,还是使用Parent-Child Context结构来优化数据写入的并发性。此外,对于更现代的持久化方案,如Realm或SQLite的直接封装,这本书完全没有涉及,这使得它的内容在当前技术栈的广度上显得有些局限。如果开发者正在构建一个企业级应用,这本书提供的持久化知识可能很快就会触及天花板。
这本书的封面设计着实吸引人,那种带着一点复古未来感的配色,让人立刻联想到那些在苹果发布会上展示的最新技术。不过,我得说,当我真正翻开它,期待能在里面找到一些关于macOS底层框架,比如Grand Central Dispatch(GCD)或者Operation Queues的深入剖析时,却发现内容似乎更偏向于面向初学者的基础语法回顾。这无可厚非,毕竟市场对入门读物有持续的需求,但对于一个已经熟练掌握了基本语法结构,渴望钻研更深层次并发控制和内存管理的开发者来说,阅读体验就显得有些平淡了。书中对Block语法的讲解很详尽,每一步的示例代码都清晰地展示了变量捕获的细节,这一点值得称赞。然而,在探讨ARC(Automatic Reference Counting)的幕后工作机制,比如引用计数器是如何在底层实现精细化管理时,篇幅显得有些仓促。我希望看到更多关于dealloc方法调用时机、循环引用检测和解决策略的实战案例,而不是仅仅停留在理论模型的描述上。总而言之,它是一份优秀的“敲门砖”,但对于想要跨越“熟练工”迈向“架构师”的读者,可能还需要搭配其他更偏向系统源码分析的专业书籍。
关于网络编程的部分,本书主要讲解了如何使用`URLSession`进行标准的RESTful API调用,包括如何设置请求头、处理JSON数据的编解码(利用`JSONSerialization`或`Codable`)。代码示例清晰易懂,可以快速上手实现网络请求。然而,在安全性与高级特性方面,着墨甚少。例如,对于TLS/SSL证书固定(Certificate Pinning)的实现细节,书中只是简单地提了一下其重要性,但没有给出在iOS中实际部署和维护证书的步骤。更重要的是,在处理复杂的网络错误恢复机制方面,比如如何优雅地实现指数退避(Exponential Backoff)策略来应对瞬时服务器错误,或者如何利用`URLSessionConfiguration`的预取(Prefetch)功能来优化用户体验,这些高级话题都没有被充分展开。感觉作者将网络部分处理成了一个“发送请求并获取数据”的教学演示,而忽略了真实世界应用中对健壮性、安全性和性能优化近乎苛刻的要求。这本书让你能“打通”网络调用的任督二脉,但无法教你如何在大风大浪中“稳住船舵”。
拿起这本书时,我正处在一个技术瓶颈期,希望能通过阅读来巩固我对UIKit生命周期管理的理解,特别是涉及到屏幕旋转、Push Notification处理以及复杂的View Controller转场动画时,系统是如何调度这些事件的。遗憾的是,这本书的大部分篇幅都集中在如何使用Storyboard和Interface Builder进行UI布局,以及如何使用`viewDidLoad`、`viewWillAppear`这些常用生命周期方法来设置初始状态。我对那些通过纯代码进行复杂视图层级构建的场景,尤其是涉及自定义Container View Controller的深入探讨几乎找不到。例如,当我们需要实现一个自定义的导航栈,并且要精确控制转场动画的插值函数和交互手势响应时,书中的示例显得过于简化,基本都是标准的`present`或`push`操作。此外,关于Core Animation的性能优化,比如图层扁平化、离屏渲染的规避策略,虽然提到了这些术语,但缺乏实际的性能分析工具(如Instruments)的截图和操作指导,让读者无法真正将理论知识与实际的性能调优工作联系起来。这本书更像是一本详尽的“手册”,而非一本能启发你解决疑难杂症的“工具箱”。
不适合没有Objective-C基础的人看,很多基础语法都一带而过
ios中算相当不错的好书
部分内容已经过时了,书很薄,讲的很粗糙
写的太泛了,一些东西就是提一下,根本不深入介绍,可以花两天时间大致浏览一下。
断断续续一星期读完,反反复复的读,翻译的还可以,如果有c、java经验,比较好理解一点,而且作者可以说是按照自己的经验来展开的,理解好理解如果不实作,还是很容易忘,于是我就反反复复的回翻,推荐