跟戴铭学iOS编程:理顺核心知识点 - (EPUB全文下载)
文件大小:0.33 mb。
文件格式:epub 格式。
书籍内容:
跟戴铭学iOS编程:理顺核心知识点
第1章 Swift
1.2 泛型
1.3 集合
1.4 协议式编程
1.5 链式编程
1.6 Swift内存管理
1.7 JSON数据的处理
1.8 网络请求
1.9 自动布局SnapKit库分析
1.10 用Swift实现一个简单的语言转译器
1.11 用Swift开发一个简单的解释器
第2章 编译器
2.2 编译流程
2.3 使用clang命令编译.m文件
2.4 clang static analyzer
2.5 IR代码
2.6 clang前端组件
2.7 Driver
2.8 clang attribute
2.9 clang警告处理
2.10 通过LibTooling控制语法树
2.11 clang插件
2.12 LLVM Backend
2.13 LLVM优化
2.14 Swift编译
2.15 编译后生成的二进制内容Link Map File
2.16 编译后生成的dSYM文件
2.17 Mach-O文件
2.18 如何利用Mach-O
2.19 dyld
2.20 LLVM工具链
第3章 iOS中的大前端技术
3.2 Weex实现技术
3.3 JavaScriptCore
3.4 WebCore
第1章 Swift
1.1 Swift简介
使用Swift这门编程语言可以开发iOS、macOS、Linux server-side、云服务,甚至TensorFlow的程序。这门语言包含了很多现在开发者喜欢的语言特性,通过引入这些先进的语法概念,Swift可以使代码编写更加简洁,更容易编写出思路新颖的代码。这些特性包含了闭包和函数指针的统一、多返回值、泛型、支持方法、扩展和协议的结构体、函数编程模式等。苹果公司希望Swift能够成为C语言、C++和Objective-C的继承者,所以既让它具有了像类型、控制流和运算符一样的Low-Level Primitives特性,又让它具备了面向对象的一些高级特性。例如Module提供了命名空间,去掉了头文件,并且提供了do、guard、defer和repeat等具有创意的语法关键字和规则。
Swift是一种多范式(Multi-paradigm)的编程语言,可以使用面向对象和函数式的方式来写程序,如面向协议编程、直接操作内存等。像C语言那样进行低层级的位操作,但是这种操作在编译环节不容易检查,不安全、容易出错,所以这种操作又具有“unsafe”特性,一般只在与C语言交互时使用。
Swift作为一个强类型语言,在编译时推断完类型之后,变量和参数等都会有确定的类型,并且在编译时有着比Objective-C更严格的静态类型检查机制。这样的设计是为了使代码更加安全。为了安全,Swift要求变量在使用前必须初始化。Swift的编译器会阻止生成并避免使用nil对象。如果使用nil对象是必要的,那么可以使用Swift中的optional功能。optional里包含了nil对象。Swift定义了一个“?”语法,该语法会在编译时强制开发者处理值为nil的情况,让你确认已安全处理了这个值。通过LLVM编译器优化,Swift的构建速度非常快。
Swift已经开源,源代码、bug追踪器和邮件列表都能在Swift.org上找到。这个开源项目包含了一系列的子项目,包括Swift编译器命令行工具、标准库、高级功能的核心库、Swift REPL的LLDB调试器,以及用于分发和构建源代码的包管理工具(Swift Package Manager)。开源后的Swift获得了更多的贡献者,使得它能在更多平台和技术社区里运用起来,并且能够移植到更多的非苹果公司的平台上。
1.2 泛型
泛型的概念最早出自C++的模板,Swift的泛型和C++模板设计的思路是一致的。为什么不与Java的泛型一致呢?原因是C++是一种编译时多态技术,而Java是运行时多态技术。Java运行时多态是在运行时才能确定的,所以会有运行时额外的计算,缺点是通过类型擦除生成的代码只有一份。而C++在编译时通过编译器来确定类型,所以在运行时就不需要额外计算了,这样效率会高一些,缺点是生成的机器码的二进制包会大一些,虽然执行快但可能会有更多的I/O。Swift采用编译时多态技术一方面是和C++一样在I/O性能和执行效率中选择了执行效率,另一方面是为了让代码更加安全。当Java在类型擦除中进行向下转型时丢失的类型只有在运行时才能看到。而Swift提供了额外的类型约束,使得泛型在定义的时候就能够判定类型。
使用泛型编写代码可以让我们写出更简洁、安全的代码。类型转换的代码也可以由编译器完成,减少了手写类型强制转换带来的运行时出错的问题。随着编译器或虚拟机技术的不断进步,在代码不变的情况下,优化工作会在编译层面完成,从而获得潜在性能方面的收益。综上所述,泛型可以写出可重用、支持任意类型的函数,以及灵活、清晰、优雅的代码。
下面我们用示例分析泛型是如何解决具体问题的。
let dragons = ["red dragon", "white dragon", "blue dragon"]
func showDragons(dragons : [String]) {
for dragon in dragons {
print("\(dragon)")
}
}
showDragons(dragons: dragons)
如果用数字类型作为编号来代表每只龙,并且需要一个函数来显示出它们的数字编号,那么需要再写一个函数,如下所示。
let dragons = [1276, 8737, 1173]
func showDragons(dragons : [Int]) {
for dragon in dragons {
print("\(dragon)")
}
}
showDragons(dragons: dragons)
以上两个函数里的 ............
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » 跟戴铭学iOS编程:理顺核心知识点 - (EPUB全文下载)