![](/img/trans.png)
[英]Grand Central Dispatch (GCD) + Key-Value Observing (KVO)
[英]Key-Value Observing (KVO) vs. Bind(_:to:withKeyPath:options:)
我對鍵值觀察方法addObserver(_:forKeyPath:options:context:)
及其隨附的observeValue(forKeyPath:of:change:context:)
與bind(_:to:withKeyPath:options:)
方法。
我知道根據 Apple 的Cocoa Bindings Programming Topics bind
方法似乎使用了 KVO 的概念,並且:
Cocoa 綁定還使用兩個協議
NSEditor
和NSEditorRegistration
有助於確保在處理用戶界面元素之前丟棄或提交任何掛起的編輯。
但是,我也注意到 KVO(及其姊妹 KVC)是Foundation
的Notifications設計模式,而bind
屬於Foundation
的Object Runtime和AppKit
的Data Management設計模式。
我仿佛看到bind
使用,只要你在處理從子類NSController
和你想與像一個模型層溝通CoreData
。 但是,Apple 的Key-Value Observing Programming Guide說,
鍵值觀察提供了一種機制,允許對象在其他對象的特定屬性發生更改時收到通知。 它對於應用程序中模型層和控制器層之間的通信特別有用。
我還在一些在線教程中看到了 KVO 用於對象間通信(這不是代表的用途嗎? )。
bind
和 KVO 似乎都在做同樣的事情。
兩者有什么區別?
我應該使用哪一種,用途是什么?
任何見解都會非常有幫助。 提前致謝!
兩者有什么區別?
KVO 是 Cocoa Bindings 的支持技術。 它允許一個對象觀察另一個對象的屬性(如果它們是 KVC 兼容的)。
Cocoa Bindings 是 KVO 之上的一個概念,它允許對象同步狀態。 通常是一個視圖和一個控制器。
例如,如果我將 NSSlider 的“值”綁定綁定到我的類的名為“foo”的整數屬性,則滑塊將觀察“foo”(使用 KVO)並在我更改其值時更新 UI。 如果用戶通過 UI 更改滑塊,它將為我更新“foo”。
請注意,綁定應該由支持它的對象記錄。 綁定名稱甚至不需要是屬性名稱。 例如,從 NSArrayController 的綁定中查看contentSet 。
我應該使用哪一種,用途是什么?
如果您想觀察屬性值,請使用 KVO。
如果您正在使用 Cocoa Bindings 兼容對象(NSTableView、NSSlider、NSButton、NSArrayController 等),您應該考慮使用 Cocoa Bindings 以減少您必須編寫以同步 UI 和控制器數據的膠水代碼量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.