iOS开发中获取App通知设置时是否必须使用[weak self]?
getNotificationSettings闭包中[weak self]是否必须? 结论
不是强制必须使用,但属于更优实践,建议保留。
具体说明
UNUserNotificationCenter.current().getNotificationSettings接收的是逃逸闭包,但系统只会临时持有这个闭包,等通知设置查询完成、闭包执行结束就会自动释放。所以即使不写[weak self],也不会出现永久的循环引用,只会让self的生命周期临时延长到闭包执行完毕。- 加上
[weak self]的好处是:如果用户在闭包执行前就退出了当前页面(self已经被释放),后续的vu.isEnabled赋值操作会自动跳过,不会执行无意义的逻辑,也不会额外占用内存。 - 你代码中
DispatchQueue.main.async里的[self]是Swift 5.3+支持的语法:在外部已经捕获weak self的前提下,内部闭包声明[self]相当于自动做了可选绑定,只要self还存在就会临时持有到闭包执行结束,没有循环引用风险,同时不用每次写self?.,写法更简洁。
可移除[weak self]的场景
只有当你的业务逻辑要求无论当前页面是否存活都必须执行完闭包内的操作时,才可以考虑移除[weak self]。不过你当前的逻辑是UI赋值,self销毁后对应的vu组件也已经被释放,赋值没有实际意义,所以完全没必要移除。
内容的提问来源于stack exchange,提问作者D C T
相关产品推荐
相关产品推荐

