首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Swift进阶之路
HiMi
创建于2021-12-28
订阅专栏
Swift进阶之路..
等 1 人订阅
共14篇文章
创建于2021-12-28
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
14. 闭包-closure
前言 闭包(closure)其实是一个捕获了上下文的常量或者是变量的匿名函数。Swift中的闭包有逃逸闭包,尾随闭包等,它既可以当做变量,也可以当做参数传递。需要注意的是Swift中的闭包与OC中的B
13. 函数-func
前言 Swift 函数非常灵活,它支持函数重载,也可以作为参数被传递,那么它的本质是什么? 一、函数的本质 1. 案例代码 这里我们直接添加: 这里我们可以断点调试一下,看看a和b存的是什么: 调试之
12. 反射-Mirror
前言 我们都知道OC是一门动态语言,它的动态特性就是基于Runtime,正因为Runtime的存在,OC 才可以在运行时创建类、进行消息转发和方法交换等。那么Swift作为一门静态语言,它有Runti
11. 可选类型-Optional
一、可选类型 1. 定义 可选类型用来表示可能为空的情况,比如这样: 从执行结果上可以看到a的值是Optional(3),而非3。那么Optional的本质是什么? 2. 本质 这里我们直接在源码中查
10. 枚举-Enum
前言 Swift中的枚举非常灵活,除了定义枚举成员,还可以定义属性,方法,可以有拓展,也可以遵循协议。 一、简单用法 枚举的用法并不复杂,熟悉语法即可。接下来,我们分析一下枚举中的原始值。 二、 原始
9. 内存管理&强引用&弱引用&无主引用
一、内存管理 我们都知道iOS的内存管理是基于引用计数,那么在底层它是如何管理的呢? 1. 案例代码 之前在分析类的初始化流程中,我们知道Swift源码中对象的初始化方法中最后返回了HeapObjec
8. 指针
一、不安全的指针 为什么说指针是不安全的? 比如我们在创建一个对象的时候,需要在堆中分配内存空间,但是这个内存空间的生命周期是有限的,这就意味着如果我们使用指针指向这块内存空间,当该内存空间的生命周期
7. 属性
一、存储属性 存储属性是一个作为特定类和结构体实例一部分的常量或变量。存储属性要么是变量存储属性(由 var 关键字引入)要么是常量存储属性(由 let 关键字引入)。存储属性这里没有什么特别要强调的
6. 方法的调度
一、类的方法调度 我们先添加如下代码 注意:这里我们用真机(arm64)来调试 断点到汇编 ldr x8, [x0]:将寄存器 x0 的值放入寄存器x8中,这里x0其实是Teacher实例的首地址,x
5. 异变方法-mutating
一、异变方法 我们知道,不管是Class还是Struct都能够定义方法,那么它们有区别吗? 分别定义一个Class和Struct,并给它们添加相同的方法,代码如下: 编译时会发现Struct中的mod
4. 类的数据结构
一、HeapObject 之前在分析类的初始化流程中,我们可以看到Swift源码中对象的初始化方法中最后返回了HeapObject对象。 我们查看HeapObject的定义 由此我们可以看到: Hea
3. 类的初始化
一、编译流程 iOS的开发语言不管是OC还是Swift最终都是通过LLVM进行编译 OC通过 clang 编译器编译成IR,然后再生成可执行文件.o(机器码) Swift 则是通过 Swift 编译器
2. 类与结构体
一、类与结构体初识 相同点: 定义存储值的属性 定义⽅法 定义下标以使⽤下标语法提供对其值的访问 定义初始化器 使⽤ extension 来拓展功能 遵循协议来提供某种功能 不同点: 类有继承的特性,
1. 内存结构
一、内存区域图 Stack(栈): 局部变量和函数运行过程中的上下文 Heap(堆): 存储所有对象 Global: 存储全局变量;常量;代码区 TEXT.text : 机器码 TEXT.cstrin