[swift 进阶]读书笔记-第五章:结构体和类 C5P5_6 闭包和可变性_内存

结构体和类

5.5 闭包和可变性

知识点:结构体的存储位置。

默认情况下结构体会存储在堆上,但绝大多数时候swift会对其优化,把结构体存储到栈上
如果结构体的变量被一个函数闭合(内部使用)了,这个结构体就会存放在堆上
结构体太大也会被存在堆上

5.6 内存 (这一节主要讲循环引用相关的)


知识点: 标准库中大部分是结构体或者枚举。因为只有一个持有者。一般情况下是不用考虑循环引用的

weak 引用


这里就讲了一些循环引用的基本知识点,我相信大家都明明白白的,不赘述。

知识点: delegate 用 weak关键字修饰(同OC)

在闭包中的使用方法

///当闭包没有参数时 不要下面的 para 
closure = {[weak self] para in
 self?.func()
}

unowned 引用


作用:不持有引用对象,但这个属性会一直有效有效(意思就是unowned 修饰的属性一定要是不为nil的)

如果确实一定有值,这个属性就不应该是可选值,这个时候可以用unowned关键字。

在闭包中的使用:同weak关键字 但self```可能不是非必选``的。

tips:


实际项目中如果对unowned 和weak 拿捏的不太准的话鼎力推荐使用weak !!!
我之前项目中一直的一个崩溃就是 用[unwoned self] 修饰self 但self可能为nil。 导致直接崩溃。

文章源文件地址

你可能感兴趣的:([swift 进阶]读书笔记-第五章:结构体和类 C5P5_6 闭包和可变性_内存)