KVC、KVO、通知

來源:互聯網
上載者:User

KVC: KVC(NSKeyValueCoding) “鍵-值-編碼”是一種間接訪問對象屬性(用字串表徵)的機制,而不是直接通過調用設定器訪問器方法或者點(.)文法去訪問對象的屬性。因此,對象的屬性都可以以一致的方式訪問。可通過字串訪問對象屬性。

KVC可以用來訪問和設定屬性的值。
設定方式:[self setValue:aName forKey:@"name"]

等同於 self.name = aName;

訪問⽅方式: aString=[self
valueForKey:@"name"] 等同於
aString = self.name;

***************************************

KVO:KVO(NSKeyValueObserving) “鍵-值-監聽”定義了這樣一種機制,當對象的屬性值發生變化的時候,我們能收到一個“通知”。

      NSObject類為所有對象提供了一個自動觀測能力的機制(NSKeyValueObserving),你可以根據具體需要來開啟這個監聽機制。

KVO是基於KVC來實現的。

實現監聽步驟

1、註冊監聽對象。 anObserver指監聽者,keyPath就是要監聽的屬性值, 而context方便傳輸你需要的資料,它是個指標類型。

-(void) addObserver:(NSObject *)anObserver

               forKeyPath:(NSString *)keyPath

                     options:(NSKeyValueObservingOptions)options

                     context:(void *)context

其中, options是監聽的選項,也就是說明監聽返回的字典包含什麼值。有兩 個常用的選項:    

      NSKeyValueObservingOptionNew 指返回的字典包含新值。

NSKeyValueObservingOptionOld 指返回的字典包含舊值。

2、實現監聽方法。監聽方法在Value(屬性的值)發生變化的時候自動調用。     

-(void) observeValueForKeyPath : (NSString *) keyPath

                         ofObject:(id)object

                          change:(NSDictionary *)change

                          context:(void *)context

其中,object指被監聽的對象。change裡儲存了一些變化的資料,比如變化 前的資料,變化後的資料。  

       

    

***************************************     

通知:iOS開發架構中的一種設計模式

     一般用於M、V、C的間的資訊傳遞

Notification對象有兩個重要的成員變 量: name 和 object. 一般name用來唯一標示一個通知對象,object指通知發 送者。

Notification對象包含一個參數,就是字典(選擇性參數),這個字典中儲存一 些傳值過程中的資訊,供接收者使用。系統要求這個參數是不可變字典。     

    

Notification * notification = [NSNotification notificationWithName:aName      

                    object:aObj

                 userInfo:aDictionary];   

  

擷取通知中樞

+ (NSNotificationCenter *)defaultCenter //擷取通知中樞

發送通知

-(void)postNotification:(NSNotification *)notification //發送通知   

自訂通知

   自訂通知是指開發人員自己來定義通知。自訂通知的一般步驟:

               註冊監聽者

               建立並發送通知

               移除監聽者

//註冊通知

[[NSNotificationCenter
defaultCenter]      addObserver:self                                               selector:@selector(didFinish:) 
                name:MPMoviePlayerPlaybackDidFinishNotification 

object:nil];  

//移除通知     一般放在dealloc方法中移除。也可以放

在需要的地方移除。

[[NSNotificationCenter
defaultCenter] removeObserver:self          name:MPMoviePlayerPlaybackDidFinishNotification            
                                  object:nil];

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.