保持关闭周期

时间:2019-12-30 13:00:42

标签: ios arrays swift reference retain

我尝试实现一些Coordinator模式的变体,但是我面临封闭中保留周期的问题。看起来像这样:

func goTo() {
    let coord = SecondViewCoordinator(nav: navigationController)
    add(coord)
    coord.start()
    coord.deinitIfNeeded = { [weak self] in
        guard let self = self else { return }
        self.free(coord)
    }
}

如您所见,我设置了deinitIfNeeded,然后,如果在SecondViewCoordinator调用中,deinitIfNeeded?()控制器正确弹出,但是即使{{1 }}数组为空。

我的协调器类如下:

SecondViewCoordinator

内存图显示以下内容:

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

onmouseleave

您在闭包内部强烈引用了coord.deinitIfNeeded = { [weak self] in guard let self = self else { return } self.free(coord) } 。尝试这样的事情;

coord

内存图表明情况确实如此(右侧表示强引用位于闭包中)。

您还可以在闭包内将coord.deinitIfNeeded = { [weak self, weak coord] in guard let self = self, let coord = coord else { return } self.free(coord) } 设置为coord.deinitIfNeeded