使用高阶Swift函数的潜在内存泄漏

时间:2018-07-19 17:50:49

标签: ios arrays swift filter closures

如果我想捕获在闭包内部运行过滤器的数组,则会创建一个强大的参考周期。由于数组是快速的值类型,因此我无法在闭包内的捕获列表中将其捕获为弱指针。对此有什么好的解决方案?

示例:

array.filter{ array.contains($0+2) }

在这种情况下,我再次捕获数组,因此创建了一个强大的参考周期,我们如何解决这个问题?

注意:我不是在寻求解决此问题的方法(保持两个值彼此相距2),这只是一个示例。我只是好奇如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

我不知道它是否适用于此问题,但是我发现拥有High order function会使用strong self导致可能的memory leaks

这非常糟糕,因为我可以做类似array.filter(byTime)的事情,而应该像array.filter { [weak self] item in return self?.byTime(item) }那样使用