KVO編碼(swift )

KVO,即:Key-Value Observing,它提供一種機制,當指定的對象的屬性被修改後,則對象就會接受收到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改後,KVO就會自動通知相應的觀察者了。

對於誇界面修改實例屬性的,我們會利用到kvo來監聽值變化,並顯示在界面上,去除NotificationCenter通知的臃腫代碼和閱讀障礙。

使用kvo時,注意在界面銷燬,移除監聽,把指針置空,避免野指針引起崩潰。

kvo代碼如下:

    var kvObservr:NSKeyValueObservation!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.adminNameLabel.text = AppCache.shared.accountModel!.nickName ?? account
        
        kvObservr = AppCache.shared.accountModel!.observe(\.nickName, options: [.old,.new], changeHandler: {[weak self] (model, change) in
            if let newValue = change.newValue{
                self?.adminNameLabel.text = newValue ?? AppCache.shared.account
            }
        })
    }
    deinit {
        print("銷燬")
        deinitTheObserve()
    }
    func deinitTheObserve(){
        kvObservr?.invalidate()
        kvObservr = nil
    }

被監聽model中的屬性必須用@objc dynamic修飾,

使用dynamic關鍵字標記屬性,使屬性啓用Objc的動態轉發功能;

dynamic只用於類,不能用於結構體和枚舉,因爲它們沒有繼承機制,而Objc的動態轉發就是根據繼承關係來實現轉發。

代碼:


class AccountModel: NSObject{
    
    var accountID: String?
    var theInitPassword:String?  //初始密碼
    var password: String?
    @objc dynamic var nickName: String?

    override init() {
        super.init()
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章