aUIAlertAction的處理程式是否需要 a [weak self]or[unowned self]來避免保留回圈,或者將其保留為強參考是否可以?
例如
extension UIViewController {
func showAlert() {
let alert = UIAlertController(
title: "Foo",
message: "Bar",
preferredStyle: .alert
)
alert.addAction(
.init(
title: "OK",
style: .default
) {
self.doSomething()
}
)
present(alert, animated: true)
}
}
處理程式閉包保留self. alert永遠不會被 顯式保留self,但self由于呼叫present?會隱式保留它 您將如何確定是否是這種情況?也許這種不確定性足以證明不使用強參考……
我知道什么時候應該使用unowned和什么時候使用weak. 我的問題是關于包括這兩者中的任何一個而不是什么都不包括,即保持它作為一個強有力的參考。有很多關于此的博客文章和問題,但大多數都集中在weakvs上,unowned并且在您不需要使用它們中的任何一個時并沒有真正擴展。
我知道實際上你可以總是把它放在[weak self]任何地方,這并不是一個真正的性能問題。但我試圖了解什么時候真的有必要,什么時候它只是噪音。在這里以警報為例,但我也有興趣總體上發展這種感覺,因此當我選擇包含或排除 a [weak self]or時,我可以證明自己是合理的[unowned self]。
self保留回圈是閉包內強參考的唯一問題嗎?
uj5u.com熱心網友回復:
確實,警報對self. 但self對警報沒有強烈的參考意義!它只是發出警報,顯示它,然后丟棄它。因此沒有保留周期。
警報只要顯示,就會繼續保留self并防止其消失。但是在警報顯示時不self應該消失,所以也沒關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530623.html
