首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Swift学习及探索
一点田心
创建于2021-05-14
订阅专栏
Swift语言学习,探索,以及好的灵感
等 21 人订阅
共14篇文章
创建于2021-05-14
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Swift中Enum枚举底层探索
EnumMetadata和StructMetadata基本上一样,这里就不在细说了,不清楚的可以看我这篇文章:Swift结构体底层StructMetadata。而且老样子,我也把EnumMetadata源码翻译成swift代码实现了,GitHub地址在这。 EnumMetada…
Swift协议Codable底层探索及应用
Codable是Swift 4.0后引入的特性,目标是取代NSCoding协议。 相信很多小伙伴已经用上了吧,虽然Codable给我们JSON数据解析带来一种解决方案,但是在很多情况下又不是那么好用。所以我们一起探索下Codable的底层实现,以及如何改进使用方式。 我们看到,…
Swift中闭包底层原理探索
『闭包』是独立的代码块, 可以在你代码中随意传递和使用 。Swift 中的闭包与 Objective-C/C 中的 Block、其他编程语言中的匿名函数相似。 闭包可以从定义它们的代码的上下文中捕获和存储任何变量。这也被称为这些变量和常量被暂时关闭使用。并且 Swift 负责处…
iOS开发初窥LLVM语法
因为Swift还是OC的编译工具是不一样的,所以两者生成LLVM文件的命令也是不一样的。 i:表示的是整形Interger,后面会跟一个数字,表示是多少位的整形。 inbounds后面跟的是步长类型,可以省略inbounds,然后接着跟的是基地址的指针,最后跟的是需要偏移的数量…
探索Swift中Dictionary的底层实现及原理
swift字典的设计思路和数组还是有点像的,可以参考我前面写的数组篇,因为这里会讲swift字典用到的hash原理,篇幅有限,将会弱化源码的阅读。 Dictionary存的貌似是个堆上的地址0x000000010053eb40,查看该地址后,发现果然和Array一样,是一个类结…
探索Swift中Array的底层实现
很显然,从定义上来看,Array是一个struct类型,那也就是值类型了。 在Array中真的只有一个属性_buffer,_buffer在_runtime(_ObjC)下是_ArrayBuffer,否则是_ContiguousArrayBuffer。在苹果的设备下应该都是兼容O…
Swift原生类底层ClassMetadata
ClassMetadata在底层源码代码有点多,所以会挑一些注意点,或者理解起来难度的地方写。一些比较基础的就跳过了,因为全写有点多。我前面写过一篇StructMetadata,会简单点,还有些相同的内容。 同样,ClassMetadata我也翻译成Swift代码实现了一遍,附…
Swift结构体底层StructMetadata
我们通过上一篇文章可以知道,Struct通过Mirror解析发现,Struct的type本质就是StructMetadata。 我们上来先嗨一下,提高点兴致,后面读源码有点枯燥。 里面的Teacher类可以替成换自己的类,也可以增加替换属性,里面的注释已经写的很详细了。 有关于…
初探Swift底层Metadata
本文将会初次探索Swift底层,但随着Swift版本更新,底层结构可能会变动(ABI已经稳定,即使调整,应该也是微调),所以在这边记录下版本号。 本文会初步探索Metadata,详细的底层结构会在文章末尾附上链接。 由于比较深入底层,会有较多指针类型,如果你不是很熟悉Swift…
Swift中的指针
一般来说,Swift是一门非常安全的语言,平时做业务的时候,基本上用的结构体,类等,都不会直接操作内存,而且有可选值的包装,也保证了值的安全。但是也有一些比较特殊的业务需要用到指针,比如与底层C的交互,字节流的解析等。这时候,Swift将会变得没那么安全,需要我们小心翼翼的操作…
Swift引用计数的底层分析
学过swift的基础语法,我们知道类对象有3种引用方式:强引用(strong)、弱引用(weak)、无主引用(unowned)。 我们从上篇文章探索Swift中Class的大致结构,了解了引用计数存放的位置。我们现在写一个小Demo,来看下引用计数的变化: 从1到2到3,可能还…
探索Swift中Class的大致结构
通过上一篇文章我们知道,swift中分配类内存空间调用的是这个方法,这个时候我们查看swift的源码,看该方法是如何实现的。 我们在HeapObject.cpp文件中找到该函数的实现,我们设一个断点在方法里面,运行下源码。 我们看到在初始化的时候,进入了swift_allocO…
初次探索SIL文件
生成SIL的文章上次已经讲过,我们这次简单分析下SIL文件。在main.swift中输入和上次一样的代码: 每个程序的开始都是main函数,swift也不例外,但是swift中的main函数被隐藏了,main.swift文件就代表了整个main函数,在文件里写的代码会在main…
Swift的中间文件:Swift Intermediate Language(简称SIL)
这样生成的项目只有一个main.swift文件,不会含有其他的干扰项。 我们可以从SIL中看到一些奇怪无规律的名字,例如:s4main6personAA7TeacherCvp。这其实是swift采用了名字重整技术,swift中的类名、方法名等会被重整,这样可以实现方法的重载,更…