3 回答

TA貢獻1780條經驗 獲得超5個贊
[unowned self]
示例:發出異步網絡請求
self
何時使用 unowned self
或 weak self
[unowned self]
[weak self]
[unowned self]
[weak self]
特別是在視頻的例子中
TempNotifier
onChange
self
unowned
self
差異 unowned
和 weak
unowned
weak
weak
unowned
weak
unowned
unowned

TA貢獻1712條經驗 獲得超3個贊
如果您有一個閉包來處理來自網絡請求的響應,請使用 weak
因為他們活得很久。視圖控制器可以在請求完成之前關閉 self
在調用閉包時不再指向有效對象。 如果有處理按鈕上的事件的閉包。這可能是 unowned
因為一旦視圖控制器消失,按鈕和它可能引用的任何其他項就會從 self
同時離開。封閉區也會同時消失。 class MyViewController: UIViewController { @IBOutlet weak var myButton: UIButton! let networkManager = NetworkManager() let buttonPressClosure: () -> Void // closure must be held in this class. override func viewDidLoad() { // use unowned here buttonPressClosure = { [unowned self] in self.changeDisplayViewMode() // won't happen after vc closes. } // use weak here networkManager.fetch(query: query) { [weak self] (results, error) in self?.updateUI() // could be called any time after vc closes } } @IBAction func buttonPress(self: Any) { buttonPressClosure() } // rest of class below. }
- 3 回答
- 0 關注
- 674 瀏覽
添加回答
舉報