3 回答
TA貢獻1780條經驗 獲得超5個贊
[unowned self]
示例:發出異步網絡請求
self
何時使用 unowned self或 weak self
[unowned self][weak self]
[unowned self][weak self]
特別是在視頻的例子中
TempNotifieronChangeselfunownedself
差異 unowned和 weak
unownedweakweakunownedweakunownedunowned
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 關注
- 686 瀏覽
添加回答
舉報
