簡體   English   中英

鍵值觀察 (KVO) 與 Bind(_:to:withKeyPath:options:)

[英]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 綁定還使用兩個協議NSEditorNSEditorRegistration有助於確保在處理用戶界面元素之前丟棄或提交任何掛起的編輯。

但是,我也注意到 KVO(及其姊妹 KVC)是FoundationNotifications設計模式,而bind屬於FoundationObject RuntimeAppKitData 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM