sho*_*hoe 1 closures weak-references swift
如果我在封闭中弱引用自我:
{[weak self] in self!.doSomethinmg()}
Run Code Online (Sandbox Code Playgroud)
并且self
已经解除分配,但关闭仍然存在.是否有可能self
在闭包中在将来的某个时刻变为非零 - 指向由运行时环境确定的一些随机新对象?
指针是一个变量,其值是一个内存地址.对于弱指针也是如此,但是nil
如果指向对象被释放,则弱指针的值(由于某些运行时魔术)设置为.如果稍后在同一存储器位置创建任何新对象,则无关紧要,弱指针变量保持不变nil
.
所以
{ [weak self] in /* ... */ }
Run Code Online (Sandbox Code Playgroud)
使用弱指针变量创建一个闭包.该变量设置nil
为取消分配指向对象时.这可能发生在调用闭包之前或执行闭包期间,所以甚至
{ [weak self] in
if (self != nil) self!.doSomethinmg()
}
Run Code Online (Sandbox Code Playgroud)
是不安全的,如果在测试和方法调用之间取消分配对象,则可能会崩溃.
但在任何时候,弱指针要么指向原始对象实例,要么指向nil
.它永远不会指向其他一些对象实例.(这可能发生在无主参考文献中.)
正如洛伦佐所说,不要强行打开弱指针.使用可选链接或在闭包内创建强引用.
归档时间: |
|
查看次数: |
212 次 |
最近记录: |