<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      iOS KVC 和 KVO 的學習

      KVC  (NSKey Value Coding) :鍵值編碼 

      KVO (Key Value Observing) :鍵值監聽

      前言:我曾經用過 監聽 一個音頻何時結束 監聽視頻播放 狀態等 用了這種方法 今天特地總結一下KVC 和 KVO.以方便以后深入學習與運用. 再而有了全新認識,再做更專業的總結. 

       

      KVC :  一個非正式的Protocol,提供一種機制來間接訪問對象的屬性。而不是通過調用Setter、Getter方法訪問。

      簡單的說,KVC 可以不進行任何操作 就可以進行對象屬性的動態讀寫.

      KVC的操作方法由NSKeyValueCoding協議提供,而NSObject就實現了這個協議(KVC),也就是說ObjC中幾乎所有的對象都支持KVC操作,常用的KVC操作方法如下:

      · 動態設置: setValue:屬性值 forKey:屬性名(用于簡單路徑)、setValue:屬性值 forKeyPath:屬性路徑用于復合路徑,例如Person有一個Account類型的屬性,那么person.account就是一個復合屬性) 

      · 動態讀?。?span style="color: rgba(0, 0, 255, 1)"> valueForKey:屬性名 、valueForKeyPath:屬性名(用于復合路徑)

       

      注意:

      (1). key的值必須正確,如果拼寫錯誤,會出現異常

      (2). 當key的值是沒有定義的,valueForUndefinedKey:這個方法會被調用,如果你自己寫了這個方法,key的值出錯就會調用到這里來

      (3). 因為類key反復嵌套,所以有個keyPath的概念,keyPath就是用.號來把一個一個key鏈接起來,這樣就可以根據這個路徑訪問下去

      (4). NSArray/NSSet等都支持KVC

       

      KVO :就是基于 KVC 實現的關鍵技術之一。這是一個典型的觀察者模式,觀察者在鍵值改變時會得到通知.

      KVO的使用也很簡單,就是簡單的3步。

            1.注冊需要觀察的對象的屬性addObserver:forKeyPath:options:context:

            2.實現observeValueForKeyPath:ofObject:change:context:方法,這個方法當觀察的屬性變化時會自動調用

            3.取消注冊觀察removeObserver:forKeyPath:context: //在dealloc中移除觀察者

       

      注冊方法的參數: 

        object : 被觀察對象

        observer: 觀察對象

        forKeyPath里面帶上property的name,如UIView的frame、center等等

        options: 有4個值,分別是:

        NSKeyValueObservingOptionNew 把更改之前的值提供給處理方法

        NSKeyValueObservingOptionOld 把更改之后的值提供給處理方法

        NSKeyValueObservingOptionInitial 把初始化的值提供給處理方法,一旦注冊,立馬就會調用一次。通常它會帶有新值,而不會帶有舊值。

        NSKeyValueObservingOptionPrior 分2次調用。在值改變之前和值改變之后。

          注:例子里的0就代表不帶任何參數進去

        context: 可以帶入一些參數,其實這個挺好用的,任何類型都可以,自己強轉就好了。

       

      實現方法的參數:

        keyPath: 對應forKeyPath

        object:  被觀察的對象

        change:  對應options里的NSKeyValueObservingOptionNew、NSKeyValueObservingOptionOld

        context: 對應context

        注意:

         (1) 需要強調的是KVO的回調要被調用,屬性必須是通過KVC的方法來修改的,如果是調用類的其他方法來修改屬性,這個觀察者是不會得到通知的。 

         (2)KVO實現原理:kvo實現通知對象的具體原理是什么呢?其實這是通過Objective-C強大的runtime運行時機制實現的。當你第一次觀察某個對象時,runtime會創建一個新的繼承被監聽類的子類。在這個新的類中,它會重寫所有被觀察的key,然后將對象的isa指針指向新創建的類(oc語言中,每一個類實際上也是一個對象。每一個類也有一個isa指針)。所以對象神奇的變成了新的子類的實例。這些被重寫的方法中添加了調用通知觀察者的方法的代碼。當一個對象的一個屬性改變時,會觸發setKey方法,但這個方法被重寫了,并且在內部添加了發送通知機制

      KVO和NSNotification的區別:

      和delegate一樣,KVO和NSNotification的作用也是類與類之間的通信,與delegate不同的是

      1)這兩個都是負責發出通知,剩下的事情就不管了,所以沒有返回值;

      2)delegate只是一對一,而這兩個可以一對多。這兩者也有各自的特點。

      3)不同于KVO,NSNotification不依賴于鍵值監聽

       

      參考:

      http://www.mamicode.com/info-detail-515516.html

      http://www.rzrgm.cn/kenshincui/p/3871178.html

      posted on 2016-06-14 14:42  ACM_Someone like you  閱讀(240)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产96在线 | 亚洲| 博罗县| 综合区一区二区三区狠狠| 国产v综合v亚洲欧美大天堂| 国产综合色在线精品| 色综合天天综合天天综| 久久青草国产精品一区| 亚洲三级香港三级久久| 国产精品亚洲二区在线播放| 久久婷婷五月综合色精品| 国产一精品一av一免费| 亚洲中文字幕一二三四区| 宜兴市| 无码囯产精品一区二区免费| 国产精品任我爽爆在线播放6080| 久久精品国产久精国产| 久久亚洲精品中文字幕无| 日本va欧美va精品发布| 亚洲av色夜色精品一区| 人成午夜免费大片| 国产成人一区二区三区免费| 国产福利片无码区在线观看| 亚洲亚洲人成综合网络| 久久99日韩国产精品久久99| 野花社区www高清视频| 亚洲第一人伊伊人色综合| 免费久久人人爽人人爽AV| 久久五十路丰满熟女中出| 亚洲国产精品久久无人区 | 中文人妻AV高清一区二区| 被黑人伦流澡到高潮HNP动漫| 久久婷婷成人综合色综合| 一本色道久久综合无码人妻| 日本无人区一区二区三区| 中文字幕人妻中出制服诱惑| 无线乱码一二三区免费看| 强伦人妻一区二区三区| 成人免费A级毛片无码网站入口| 精品国产综合成人亚洲区| 松原市| 天堂中文8资源在线8|