KVO簡而言之就是:基于鍵值的觀察者,實(shí)際上就是觀察者模式。
Cocoa Framework已經(jīng)為我們提供了這一模式,不需要我們自己來實(shí)現(xiàn)了。我們只需要按照約定的方式去做就可以了。KVO主要用于用戶界面交互,當(dāng)多個(gè)View共同使用了同一個(gè)實(shí)體,當(dāng)這個(gè)實(shí)體中的某個(gè)屬性改變時(shí),如果需要更新多個(gè)界面,KVO的作用就發(fā)揮出來了。
下面給出一個(gè)簡單的示例,來展示如何使用KVO。示例下載
有兩種方式可以在鍵值改變的時(shí)候給觀察者發(fā)送通知:自動(dòng)方式和手動(dòng)方式。其中自動(dòng)方式是由NSObject提供的一個(gè)默認(rèn)實(shí)現(xiàn),通常情況下,如果你自定義了一個(gè)類是從NSObject繼承而來,那么該類就已經(jīng)具有了KVO的自動(dòng)通知功能,而且不需要額外的編寫代碼。如果需要手動(dòng)控制通知方式,那么需要重寫automaticallyNotifiesObserversForKey:方法。在該方法中如果需要手動(dòng)控制通知方式,則將automaticallyNotifiesObserversForKey:返回NO,否則返回YES。
下面的例子是將openingBalance屬性設(shè)置為手動(dòng)通知方式,其他屬性默認(rèn)為自動(dòng)通知方式
手動(dòng)通知方式的好處在于可以減少不必要的通知,比如你可以首先檢測(cè)一下該屬性值是否發(fā)生改變,如果發(fā)生改變則通知,否則不通知,代碼示例如下:
如果一個(gè)單一的操作引發(fā)了多個(gè)屬性值的改變,那么就必須嵌套改變通知。代碼示例如下:
posted on 2011-07-26 18:53 孔雀 閱讀(6742) 評(píng)論(0) 編輯 收藏 引用 所屬分類: iOS