函数参数应该弱吗?
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
.
更重要的是,根据 helloView
与 self
在这种情况下的关系,您完全有可能也想强烈捕捉自我。
我有以下引用较弱的案例:
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
.
更重要的是,根据 helloView
与 self
在这种情况下的关系,您完全有可能也想强烈捕捉自我。