作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这些 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/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!