我有以下情况,参考文献薄弱:
function hello(to persons: [Person]) {
/// should persons be also weak below?
helloView.didHelloPressed = { [weak self] someFlag in
self?.configurePersons(persons)
}
}
在上面的代码中,我捕获了较弱的东西,并且我知道self
应该很弱,因为我使用了它的功能(configurePersons
)。但是persons
函数的参数hello
数组也应该弱吗?我认为是的,但是我没有明确解释。我以为如果self
不为零,那么persons
也将不为零,并且使其变弱也没有道理。
答案 0 :(得分:1)
数组是Swift中的值类型。它不受ARC管理。因此,答案是否定的。
答案 1 :(得分:1)
在Swift中,强烈引用了函数参数。我也不确定是否有办法将任何参数作为弱引用传递。在这种情况下,没有循环调用函数hello(to: person)
。因此,答案是否定的。
答案 2 :(得分:1)
弱引用不是您应该使用的“仅仅是因为我看到一个闭包”。
即使使用闭包,甚至使用self
,在很多时候您也不想使用弱引用。
存在弱引用会破坏强引用周期。而已。闭包的捕获变量是存在的一种强大参考。如果闭包强烈捕获变量,则不会发生任何令人恐惧的事情。
问题是当闭包捕获foo
,然后将闭包存储在foo
中时。那是一个很强的参考周期,需要打破。这两个引用之一必须很弱,因此要么应该将闭合foo
保持在较弱的位置,要么应该将foo
保持在较弱的位置。
您的persons
的类型为Array<Person>
。如果这些Person
对象之一强烈引用helloView
,而对象本身强烈引用其didHelloPressed
闭包,则可能存在强引用周期。但这将很奇怪,并且几乎可以肯定(希望如此!)不是您在做什么,所以不,不需要弱捕获persons
。
更甚者,取决于helloView
与self
在这种情况下的关系,您很有可能也想牢牢抓住自己。