函数参数应该弱吗?

Should function arguments be weak?

我有以下引用较弱的案例:

function hello(to persons: [Person]) {
    /// should persons be also weak below?
    helloView.didHelloPressed = { [weak self] someFlag in 
        self?.configurePersons(persons)
    }
}

在上面的代码中,我捕获了 weakly 并且我理解 self 应该是 weak 因为我使用了它的功能(configurePersons)。但是 persons 数组,即 hello 函数的参数是否也应该是弱的?我想是的,但我没有解释清楚。我认为如果 self 不是 nil,那么 persons 也不会是 nil 并且使它变弱是没有意义的。

数组是Swift中的值类型。它不受 ARC 管理。所以,答案是否定的

在Swift中,函数参数被强引用。我也不确定是否有办法将任何参数作为弱引用传递。在这种情况下,没有循环调用函数hello(to: person)。所以,答案是否定的

弱引用不是“仅仅因为我看到闭包”就应该使用的东西。

即使使用闭包,甚至使用 self,也有 很多 次您不想要弱引用。

存在弱引用以打破强引用循环。而已。闭包的捕获变量是一种存在的强引用。如果闭包强烈捕获变量,则不会发生任何可怕的事情。

问题是闭包捕获 foo,然后将闭包存储在 foo 中。这是一个强引用循环,需要打破。两个引用之一需要是弱的,所以要么你应该在 foo 中弱地持有闭包,要么你应该在 clsoure.

中弱地捕获 foo

您的 persons 类型为 Array<Person>。如果其中一个 Person 对象对 helloView 有强引用,那么 可能 是一个强引用循环,它本身对其 didHelloPressed 关闭。但这会很奇怪,而且几乎可以肯定(希望!)不是你在做什么,所以不,没有必要弱捕获 persons.

更重要的是,根据 helloViewself 在这种情况下的关系,您完全有可能也想强烈捕捉自我。