具体描述
《跟戴铭学iOS编程:理顺核心知识点》针对 iOS 应用开发涉及的核心知识点进行详细剖析,分为 Swift、编译器、iOS 中的大前端技术三大章,从应用、进阶、未来三方面全方位剖析 iOS 开发。第1章从 Swift 源码和第三方库源码层面来分析ios开发在实际工作中的常用核心知识,包括数据类型、编程范式、内存管理、网络处理、页面布局、完整的转译器和解释器等内容。第2章通过分析 LLVM 源码、编译后的可执行文件内部结构、链接器来讲解 iOS 开发进阶知识,同时介绍在实际工作中的应用场景和示例。第3章介绍在未来的iOS “大前端浪潮”中需要掌握的核心知识,包括 JavaScriptCore、WebCore 等。
《跟戴铭学iOS编程:理顺核心知识点》适合对 iOS 有兴趣的开发人员学习,也适合经验丰富的 iOS 开发者和对编程语言本身有兴趣的人员参考。
作者简介
戴铭,阿里巴巴高级技术专家,滴滴出行前技术专家。极客时间《iOS开发高手课》作者。有大量亿级APP工程架构、性能优化相关实战经验。
目录信息
1.1 Swift简介
1.2 泛型
1.2.1 类型约束
1.2.2 关联类型
1.2.3 类型擦除
1.2.4 Where 语句
1.2.5 泛型和 Any 类型
1.3 集合
1.3.1 基本概念
1.3.2 迭代器
1.3.3 Sequence协议
1.3.4 Collection协议
1.3.5 Map
1.3.6 flatMap
1.3.7 Reduce
1.3.8 Array
1.3.9 弱引用的 Swift 数组
1.3.10 Dictionary
1.4 协议式编程
1.5 链式编程
1.6 Swift 内存管理
1.6.1 内存分配
1.6.2 Swift 派发机制
1.6.3 基本数据类型内存管理
1.6.4 struct 内存管理
1.6.5 class 内存管理
1.6.6 协议类型内存管理
1.6.7 泛型的内存管理
1.7 JSON 数据的处理
1.7.1 使用 JSONDecoder
1.7.2 CodingKey 协议
1.7.3 JSONDecoder 的 keyDecodingStrategy 属性
1.7.4 枚举定义 block
1.7.5 inout
1.8 网络请求
1.9 自动布局 SnapKit 库分析
1.9.1 给谁做约束
1.9.2 如何设置约束
1.9.3 设置完约束后如何处理
1.10 用Swift 实现一个简单的语言转译器
1.10.1 转译器简介
1.10.2 词法分析器
1.10.3 语法分析器
1.10.4 遍历器
1.10.5 转换器
1.10.6 代码生成器
1.10.7 Scheme的其他特性
1.10.8 Babel
1.11 用Swift 开发一个简单的解释器
1.11.1 四则运算
1.11.2 算术表达式
1.11.3 中间表示
1.11.4 变量
1.11.5 属性
1.11.6 静态检查
第2章 编译器
2.1 LLVM 简介
2.2 编译流程
2.3 使用clang命令编译 .m 文件
2.3.1 构建 Target
2.3.2 Target 在构建过程中的控制
2.4 clang static analyzer
2.5 IR 代码
2.5.1 IR 结构
2.5.2 LLVM IR 优化
2.5.3 SSA
2.6 clang 前端组件
2.6.1 库的介绍
2.6.2 使用 libclang 进行语法分析
2.7 Driver
2.7.1 Driver 的工作流程
2.7.2 Parse
2.7.3 Pipeline
2.7.4 Action
2.7.5 Bind
2.7.6 Translate
2.7.7 Jobs
2.7.8 Execute
2.8 clang attribute
2.9 clang 警告处理
2.10 通过LibTooling 控制语法树
2.11 clang 插件
2.12 LLVM Backend
2.12.1 CodeGen 阶段
2.12.2 SelectionDAG
2.12.3 Register Allocation
2.12.4 Code Emission
2.13 LLVM 优化
2.14 Swift 编译
2.15 编译后生成的二进制内容 Link Map File
2.16 编译后生成的 dSYM 文件
2.17 Mach-O 文件
2.18 如何利用 Mach-O
2.18.1 打印堆栈信息,保存现场
2.18.2 通过hook获取更多信息的方法
2.18.3 hook msgsend 方法
2.18.4 统计方法调用频次
2.18.5 找出 CPU 使用的线程堆栈
2.18.6 Demo
2.19 dyld
2.20 LLVM 工具链
2.20.1 获取 LLVM
2.20.2 编译 LLVM 的源代码
2.20.3 LLVM 源代码工程目录介绍
2.20.4 lib 目录介绍
2.20.5 工具链命令介绍
第3章 iOS中的大前端技术
3.1 大前端技术简介
3.2 Weex 实现技术
3.2.1 将iOS 工程集成 WeexSDK
3.2.2 自定义端内能力的 Module
3.2.3 读取用 JavaScript 写的 Weex 内容
3.2.4 从 Vue 代码到 JS bundle
3.2.5 在端内运行 JS bundle 的原理
3.3 JavaScriptCore
3.3.1 JavaScriptCore 介绍
3.3.2 JavaScriptCore 全貌
3.3.3 JavaScriptCore 与 WebCore
3.3.4 词法、语法分析
3.3.5 从代码到 JIT 的过程
3.3.6 分层编译
3.3.7 类型分析
3.3.8 指令集架构
3.3.9 JavaScript
3.4 WebCore
3.4.1 浏览器历史
3.4.2 WebKit 全貌
3.4.3 WTF
3.4.4 Loader
3.4.5 HTML 词法解析
3.4.6 HTML 语法解析
3.4.7 构建 DOM Tree
3.4.8 CSS
3.4.9 RenderObject Tree
3.4.10 Layout
· · · · · · (收起)
读后感
用户评价
我不得不提一下这本书在关于iOS的最新技术和框架方面的讲解,真的太及时和超前了!我之前感觉iOS开发更新换代太快了,很多新东西学起来有点吃力。这本书非常敏锐地捕捉到了开发者们最关心的一些新技术,并且进行了深入浅出的讲解。比如,它详细介绍了SwiftUI,这是Apple推出的声明式UI框架。作者从SwiftUI的基本概念、视图(View)、状态管理(State, Binding, ObservedObject)讲起,一步步地演示了如何使用SwiftUI来构建各种UI界面。我特别喜欢作者通过对比UIKit和SwiftUI的实现方式,来突出SwiftUI的优势,比如更简洁的代码、更直观的布局方式以及与Swift语言更紧密的结合。通过这本书,我感觉自己已经掌握了SwiftUI的基本用法,并且对未来的UI开发有了新的认识。另外,作者还深入讲解了Combine框架,这是Apple推出的响应式编程框架。他详细解释了Publisher、Subscriber、Operator等核心概念,并且演示了如何使用Combine来处理异步事件流,比如网络请求的结果、用户交互的事件等等。这对于我理解和使用响应式编程模式非常有帮助。最让我惊喜的是,作者还涉及了一些关于ARKit和Core ML的内容,虽然只是初步的介绍,但已经让我看到了iOS在增强现实和机器学习领域的巨大潜力。这本书的学习,让我感觉自己不再落伍,并且对iOS技术的未来发展有了更清晰的展望。
我必须毫不犹豫地说,这本书在关于iOS开发的实际经验和最佳实践方面,给我带来了极大的价值。很多技术书籍往往侧重于理论和API的讲解,但这本书却非常注重开发者在实际项目中会遇到的问题和经验。作者就像一位和你并肩作战的资深开发者,分享了他多年积累的宝贵经验。比如,在代码规范和风格方面,他不仅给出了建议,还解释了为什么要有这样的规范,以及它如何能提高团队协作的效率。在项目管理方面,他分享了如何进行版本控制(Git)、如何编写有意义的提交信息、如何进行代码审查等等,这些都是非常实用且容易被初学者忽略的方面。我特别喜欢作者关于“代码可读性”和“可维护性”的强调,他给出了很多关于如何命名变量、函数,如何组织代码结构,如何编写清晰的注释等方面的建议。此外,在错误处理方面,作者也给出了非常系统的指导,包括如何使用`do-catch`语句,如何设计清晰的错误类型,以及如何有效地向用户呈现错误信息。最让我惊喜的是,作者还分享了一些关于开发者职业发展和学习方法的心得体会,比如如何持续学习新技术、如何参与开源社区、如何提升自己的技术影响力等等。读完这本书,我感觉自己不仅仅学到了技术,更重要的是,我对如何成为一名优秀的iOS开发者有了更清晰的认知和更坚定的目标。这本书真的让我受益匪浅,强烈推荐给所有想要深入学习iOS开发的同学!
这本书在讲解iOS的架构设计和设计模式方面,真的给了我很多启发。我之前写代码的时候,往往是想到哪里写到哪里,代码的可维护性和扩展性都很差,随着项目越来越大,问题就暴露出来了。这本书通过对MVC、MVVM、VIPER等主流架构模式的详细介绍,为我指明了方向。作者并没有简单地罗列这些模式的定义,而是深入剖析了它们各自的优缺点,以及在实际开发中的应用场景。他通过清晰的图示和代码示例,展示了如何将UI、业务逻辑和数据模型进行分层,从而提高代码的可读性和可维护性。我特别喜欢作者对MVVM模式的讲解,他详细地阐述了ViewModel在其中扮演的角色,以及如何通过数据绑定(Data Binding)来简化UI和业务逻辑之间的交互。这对我来说,简直是福音,极大地简化了UI状态的管理。此外,这本书还系统地介绍了iOS开发中常用的设计模式,比如单例模式、工厂模式、观察者模式、策略模式等等。作者解释了每种模式的适用场景,并且给出了如何在Swift中优雅地实现这些模式的示例。我印象深刻的是,作者强调了“开闭原则”和“依赖倒置原则”在设计模式中的应用,这让我对面向对象设计的原则有了更深刻的理解。通过学习这本书,我感觉自己写代码的思路发生了根本性的转变,从“如何快速实现功能”转变为“如何写出更健壮、更易于维护和扩展的代码”。
这本书关于多线程和并发编程的部分,绝对是其中的亮点之一。我之前对于多线程的概念一直有点模糊,感觉GCD(Grand Central Dispatch)和NSOperationQueue就像是黑箱操作,只知道怎么用,但不太清楚背后的原理。这本书则完全颠覆了我之前的认知。作者从线程的基本概念讲起,包括线程的创建、启动、暂停、恢复等生命周期,以及线程同步和互斥锁等基本概念。然后,他重点深入讲解了GCD的各个方面,比如dispatch_queue的类型(串行、并发)、dispatch_apply、dispatch_once等等,并且通过非常形象的比喻和精巧的代码示例,把GCD的底层工作机制解释得淋漓尽致。我特别喜欢作者关于GCD的“调度组”和“信号量”的讲解,这些高级用法在很多实际场景中都能派上用场。接着,作者又详细讲解了NSOperationQueue,对比了它和GCD的异同,并且演示了如何使用NSOperation和NSBlockOperation来实现更灵活的任务管理和依赖关系。最让我惊喜的是,作者还讲解了如何避免多线程编程中的常见问题,比如竞态条件、死锁等,并且给出了有效的解决方案。他强调了“数据竞争”的概念,并且介绍了Atomic属性和读写锁等机制来保证线程安全。读完这部分,我感觉自己对多线程和并发编程的理解,已经从“能用”提升到了“能用好”,并且能够自信地应对更复杂的并发场景了。
这本书我刚拿到手,迫不及待地翻开,里面关于Swift语言基础的部分,作者的讲解方式真的特别吸引人。我之前也看过一些Swift的书,但总是感觉有些地方说得比较晦涩,或者举的例子太过于理论化,跟实际开发有点脱节。这本书就不一样了,从最基本的变量、常量、数据类型讲起,每个概念都用非常贴近生活的例子来解释,比如讲到枚举的时候,作者竟然用“一周中的星期几”和“手机的充电状态”来举例,我当时就觉得豁然开朗。更让我惊喜的是,作者在讲解过程中,并没有简单地罗列语法,而是着重强调了这些语法背后的设计理念和在实际开发中的应用场景。比如,在讲到Optionals的时候,作者花了相当大的篇幅去解释为什么需要Optional,以及它如何帮助我们避免空指针异常,这对于我这种刚入门的开发者来说,简直是醍醐灌顶。我特别喜欢作者那种循序渐进的教学方式,一步步引导读者理解,而不是一股脑地把所有知识点都抛出来。而且,我发现作者在很多细节上都处理得很好,比如在介绍数组和字典的时候,会提醒读者注意它们的性能特点,以及在什么情况下更适合使用哪种数据结构,这些都是在其他一些入门书籍中很少提及的宝贵经验。读完这部分,我对Swift语言的理解程度可以说是一个质的飞跃,也更有信心去深入学习接下来的内容了。
这本书在数据存储和网络通信方面的讲解,可以说是为我打开了一扇新的大门。我之前做的一些小项目,数据存储主要就是用UserDefaults,网络请求也就是简单地调用一些第三方库的API,感觉知其然不知其所以然。这本书对这些核心概念的讲解,深度和广度都让我印象深刻。在数据存储方面,作者首先详细对比了UserDefaults、Property List、Core Data和Realm等不同的存储方式,并且分析了它们各自的优缺点和适用场景。我特别喜欢作者对Core Data的讲解,他并没有直接抛出复杂的API,而是先从模型设计、数据迁移、关系建立等方面入手,一步步地引导读者理解Core Data的强大之处。作者还给出了很多实际的案例,比如如何实现数据的增删改查、如何进行复杂查询、以及如何处理多线程访问数据等等,这些都极大地帮助我理解了Core Data的实际应用。在网络通信方面,作者讲解了底层的URL Loading System,以及更常用的URLSession API。他深入地剖析了HTTP请求的各个组成部分,包括请求头、请求体、响应码、响应头等等,并且详细讲解了如何使用URLSession来发送GET、POST等不同类型的请求,如何处理JSON数据,以及如何实现断点续传等高级功能。更让我惊喜的是,作者还涉及了网络安全方面的内容,比如HTTPS的工作原理和证书的使用,这对于我来说是非常宝贵的信息。读完这部分,我对如何在iOS应用中有效地管理数据和进行网络通信有了更系统和深入的理解。
对于UI编程这块,我必须说这本书简直太有用了!我之前一直觉得iOS的UI开发,尤其是使用UIKit框架,有些地方操作起来挺繁琐的,特别是涉及到布局和动画的时候。这本书在讲解UIKit的UI控件和布局方面,提供了一种非常清晰且实用的视角。作者从最基础的`UIView`和`UIViewController`开始,逐步深入到如何使用Autoresizing Mask和Auto Layout来创建灵活且适应不同屏幕尺寸的界面。我特别喜欢作者讲解Auto Layout的部分,他并没有简单地罗列约束的语法,而是通过大量的实际例子,比如如何构建一个列表、一个表单、或者一个复杂的详情页,来演示如何有效地使用约束来定义控件之间的相对位置和尺寸。作者还深入讲解了`UIStackView`,这个控件真的太方便了,用它来管理一系列控件的排列,可以省去大量的约束设置工作。另外,关于页面的跳转和导航,作者也讲得非常透彻,从基本的`push`和`present`,到更复杂的`UINavigationController`和`UITabBarController`的使用,以及如何通过Segue来管理页面之间的关系,都解释得非常到位。最让我惊喜的是,这本书还涉及了动画的实现,从简单的属性动画,到更复杂的基于Core Animation的动画,作者都给出了清晰的代码示例和讲解,让我觉得UI的动态效果不再是遥不可及的难题。读完这部分,我对如何构建一个美观且交互流畅的iOS应用有了更深刻的理解和更强的动手能力。
这本书在性能优化和内存管理的讲解,可以说是为我打通了“任督二脉”。我之前写出来的应用,有时候会出现卡顿、响应慢,或者无故闪退的情况,但又找不到根本原因。这本书就像一位经验丰富的医生,帮我诊断出了这些问题。作者首先深入讲解了iOS应用的性能瓶颈分析,包括CPU占用、内存使用、磁盘I/O、网络请求等方面。他详细介绍了Instruments工具的使用,比如Time Profiler、Allocations、Leaks等,并且通过实际案例演示了如何利用这些工具来定位性能问题。我印象特别深刻的是,作者讲解的关于“离屏渲染”、“过度绘制”等概念,以及如何通过优化UI层级、简化视图绘制来提高渲染性能。在内存管理方面,作者深入讲解了ARC(自动引用计数)的工作原理,并且详细剖析了循环引用(retain cycle)的产生原因和避免方法。他通过非常生动的图示和代码示例,解释了强引用、弱引用、无主引用之间的区别和联系,以及如何在闭包和代理中使用它们。最让我惊喜的是,作者还涉及了内存泄漏的检测和定位,以及如何使用Instruments的Leaks工具来查找和修复内存泄漏。读完这部分,我感觉自己对iOS应用的性能优化和内存管理有了质的飞跃,能够更自信地写出高效、稳定的应用了。
这本书在单元测试和自动化测试方面的讲解,为我解决了一个长久以来的痛点。我之前总是觉得测试是件很麻烦的事情,而且写测试代码也需要花费额外的时间。但这本书让我认识到了单元测试的重要性,并且提供了非常实用的方法和工具。作者首先详细讲解了XCTest框架,包括如何创建测试目标,如何编写测试用例(test case)和测试方法(test method),以及如何使用断言(assertions)来验证代码的正确性。他通过大量的代码示例,演示了如何对视图控制器、模型类、网络请求等不同的代码组件进行单元测试。我特别喜欢作者讲解的“测试驱动开发”(TDD)的理念,虽然我还没有完全实践TDD,但通过书中的讲解,我已经理解了它如何能帮助我们写出更健壮、更易于维护的代码。除了单元测试,这本书还涉及了UI测试,通过XCUI Test来模拟用户在界面上的操作,从而验证UI的正确性。作者详细讲解了如何录制UI测试,如何编写可读性强的UI测试代码,以及如何处理异步操作和动画的等待。更让我惊喜的是,作者还简单介绍了持续集成(CI)的概念,以及如何将测试集成到CI流程中,以确保代码的质量。读完这部分,我感觉自己对如何构建高质量的iOS应用有了更全面的认识,并且更有动力去编写和维护单元测试,从而提升应用的稳定性和可靠性。
我被这本书中关于Objective-C与Swift互操作性的章节深深吸引了。在当今的iOS开发生态中,遗留的Objective-C代码库仍然普遍存在,并且很多新的项目也会选择Swift作为主要开发语言。如何在这两种语言之间无缝切换和协同工作,一直是困扰很多开发者的难题。这本书在这方面提供了非常系统和深入的讲解。作者通过详细的代码示例,清晰地展示了如何在Swift项目中调用Objective-C的代码,反之亦然。我印象最深刻的是关于数据类型转换的章节,比如Objective-C的`NSString`和Swift的`String`之间的转换,以及`NSArray`和`NSMutableArray`与Swift的`Array`之间的转换,作者不仅给出了具体的代码实现,还解释了背后的原理,例如ARC(自动引用计数)在不同语言环境下的工作机制。另外,作者还详细讲解了如何在Objective-C和Swift之间传递Block和Closures,这部分内容对于处理异步操作和回调函数至关重要。我之前一直担心这个问题会非常复杂,但读完这本书后,发现只要掌握了作者讲解的方法和技巧,实际上是相当可控的。作者还特别提醒了一些潜在的陷阱和最佳实践,比如如何处理nil值在不同语言之间的传递,以及如何避免因为类型不匹配而导致的运行时错误。这部分内容对我来说,极大地提升了我在混合开发项目中的信心和效率,让我能够更从容地面对项目中可能出现的Objective-C遗留代码。
一本好的书确实应该图文并茂,但是插入无关的图片是几个意思?到底是出swift技术书籍还是想出画册?
整本书随便翻翻很多代码🤦♂️ 贴代码可以,但是讲解太少,一页代码,一行讲解,贴代码的意义在哪里
一本好的书确实应该图文并茂,但是插入无关的图片是几个意思?到底是出swift技术书籍还是想出画册?
这本书要看懂的话,需要有很多知识的储备,作者在写的过程中就是很随意的一笔带过了,就像学数学,先告诉你1+1=2,然后就叫你解答微积分方程,没有详细的步骤,学习曲线很陡峭
戴铭老师新作啊,支持支持~