swift – 在异步网络请求中捕获自身弱或无主
发布时间:2020-12-14 02:26:41 所属栏目:百科 来源:网络整理
导读:每当我进行异步网络请求时,可能是在请求到达时self已经是nil(例如,ViewController已被解除). 为了防止这种情况,我通常将自我视为弱者: future.onSuccess(context: Queue.main.context,callback: { [weak self] result in if let strongSelf = self { // Do
每当我进行异步网络请求时,可能是在请求到达时self已经是nil(例如,ViewController已被解除).
为了防止这种情况,我通常将自我视为弱者: future.onSuccess(context: Queue.main.context,callback: { [weak self] result in if let strongSelf = self { // Do some stuff with self,which is now guaranteed to be not nil // strongSelf.someMethod() } }) 或者我可以将自己视为无主: future.onSuccess(context: Queue.main.context,callback: { [unowned self] result in // Do some stuff with self // self.someMethod() }) 我不关心请求返回,因为当请求在ViewController已被解除的时间点返回时,我没有从请求中显示任何内容.所以我不想让关闭时自我“活着”. 我现在的问题是 – 在这种情况下是否足以将自己视为无主?或者我必须一直做[弱自我]的零检查?如果在请求到达并且self已经为零时无主捕获的情况下会发生什么 – 闭包是否仍然存在且将执行并且将在访问nil时触发运行时错误?或者封闭也会与自己一起解除分配,请求会遇到“空白”? 或者在这种情况下我可以忘记弱者和无人物,因为当自我取消分配时,闭包也将被解除分配,因此在请求到达时没有访问nil的危险吗? PS:我知道关于这个话题已经有很多问题 – 答案但是在我不关心异步到达的情况下我找不到答案.
如果您在没有弱关键字或无关键字的情况下捕获self,则视图控制器将由闭包保留,并且在闭包死亡之前不会释放.弱与无主之间的区别在于weak是一个Optional,需要条件绑定作为安全检查.另一方面,无主并非故障安全.它假定您的视图控制器仍处于活动状态,如果不存在则会崩溃.有关更多信息,请参阅
this answer.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |