gpt4 book ai didi

ios - 无主在逻辑上等同于弱!在 swift

转载 作者:IT王子 更新时间:2023-10-29 05:51:40 26 4
gpt4 key购买 nike

这些 block 在相同情况下是否总是失败(当闭包正在执行但 self 被释放时)?

{ [unowned self] in
//use self
self.number = self.number + 1
}

{ [weak self] in
//use self!
self!.number = self!.number + 1
}

最佳答案

Unowned reference 不保持对 self 的强引用,但它假设对象总是有一些值(不是 nil),如果在执行 block 时 self 如何释放,上面的代码会崩溃。

对于 weak 的情况,如您的示例所示,weak 是 block 内的可选类型,因此也可能有一个值或者它可能为 nil。您有责任检查该值是否存在并对其调用方法。如上所述,如果您使用解包运算符 (!),当 self 被释放时,它肯定会崩溃。因此,如果代码块仍在执行并且 self 同时被释放,那么这两个版本的代码都会崩溃。

因此,我建议使用 weak 来使用可选检查来保护此类崩溃,

{ [weak self] in
if let me = self {
me.number = me.number + 1
}
}

关于ios - 无主在逻辑上等同于弱!在 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25866397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com