结构体和类
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。
导致直接崩溃。
网友评论