阅读 419

swift 一些笔记

block的一些原理

不包含局部变量和包含全局变量

当闭包內未包含局部变量时,其实跟函数一致,方法调用也是跟函数似的,拿到函数地址直接调用,函数存在于代码段。当闭包只包含全局变量情况也类似,可以直接调用。

包含局部变量

以只含一个局部变量为例:

当闭包包含局部变量时,需要在内存开辟一段堆空间。会申请24个字节,因内存对齐实际开辟32个字节。堆空间布局和类非常类似。前8个字节存放函数地址,(中间8个字节存放引用计数),后8个字节存放copy局部变量的值。

当调用闭包时,会取前8个字节也就是函数地址进行调用,这时内部默认会追加传入一个参数给函数(即闭包的地址)。当函数使用到局部变量时就会以闭包地址加上16个字节(即copy的局部变量值)来进行使用。使用完毕再去更新堆上的变量值。

字符串

数组

String, Array 定义和行为上是值类型,底层数据结构更接近引用类型。

结构体

结构体数据直接放在结构体内存里面。

枚举

枚举关联值直接保存在内存中,case在内存中只占用一个字节,取rawValue时类似于方法调用,值不保存在枚举对象中。

.self .type

class.self 指向类信息,和一个类实例对象前8个字节指向相同 class.type .self的类型 类的类型

关注下面的标签,发现更多相似文章
评论