【问题标题】:Potential Memory Leak Using High Order Swift functions使用高阶 Swift 函数的潜在内存泄漏
【发布时间】:2018-12-27 23:14:57
【问题描述】:

如果我想捕获我在闭包内运行过滤器的数组,那将创建一个强引用循环。由于数组是 swift 中的值类型,因此我无法在闭包内的捕获列表中将其捕获为弱指针。有什么好的解决方案?

例子:

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

在这种情况下,我再次捕获数组,因此创建了一个强引用循环,我们如何解决这个问题?

注意:我并不是要解决这个问题(保持彼此相距 2 的值),这只是一个示例。我只是好奇我们如何解决这个问题。

【问题讨论】:

  • 你不能有一个非引用类型的引用循环。不要假设存在内存泄漏。使用 Instruments 验证是否确实存在内存泄漏。
  • > 引用计数仅适用于类的实例。结构和枚举是值类型,而不是引用类型,并且不是通过引用存储和传递的。 from here

标签: ios arrays swift filter closures


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多