问题描述:
控制器的deinit被推迟执行,导致监听横竖屏的通知没有隐藏,引起masonry中的约束找不到self.view崩溃。
找到问题
let group = DispatchGroup()
group.enter()
request{
group.leave()
}
.
.
.
group.notify{
}
由于在请求中加了几个print,发现进入控制器后进行的一系列请求,在控制器dismiss之后还在回调,猜测是这里持有self,导致的释放延迟问题。
经过测试,果然这里的问题。
解决方案
group.notify{ [weak self] in
guard let self = self else {
return
}
}
得到结论
很多闭包虽然不会引起循环引用,但依然会导致实例延迟释放。