kvo即鍵值觀察者,它提供了乙個觀察者模式,用於監聽某個物件屬性值的變化,可以實現乙個觀察者,乙個被觀察者,多個接收者之間的通訊關係。
kvo的工作流程: 1.
被觀察者屬性發生變化(
child
物件的cleanvalue
發生變化) 2.
觀察者監聽到屬性的變化(
kvo幫我們實現了觀察者的業務邏輯) 3.
觀察者會呼叫觀察者方法通知到事件的接收者(觀察者通知到保姆) 4.
事件接收者響應這個事件。
在接收者類中新增小孩的觀察者,物件寫self,下面實現觀察者方法,其中改變小孩的相關屬性值,最後手動移除觀察者
1、新增觀察者的方法:
_child:
被觀察者
addobserver:
事件的接收者
options:
表示在觀察者方法的
change
引數中能夠獲取的值。
context:
傳遞的引數 [
_child
addobserver
:self
forkeypath
:@"cleanvalue"
options
:nskeyvalueobservingoptionnew
context
:null];
2、觀察者響應事件的方法:
//keypath:
被觀察者監聽的屬性名
//object:
被觀察者
//change:
是乙個字典,提供了關於
kvo的有效資訊,比如
key:new
時表示的是屬性變化後的新值,
key:old
表示的是屬性變化前的舊值
- (void
)observevalueforkeypath:(
nsstring
*)keypath ofobject:(
id)object change:(
nsdictionary
<
nsstring
*,id
> *)change context:(
void
*)context {}
舉例:小孩髒了,需要保姆來打理
給小孩新增乙個觀察者,事件的接收者是保姆,觀察者把小孩潔淨度這個屬性值傳遞到保姆,保姆去響應打理小孩的方法。
#import "child.h"
@implementation child
- (instancetype)init
[nstimer scheduledtimerwithtimeinterval:1 target:self selector:@selector(timeraction:) userinfo:nil repeats:yes];
return self;
}- (void)timeraction:(nstimer *)timer
@end
#import "nanny.h"
#import "child.h"
@implementation nanny
- (instancetype)initwithchild:(child *)child
return self;
}- (void)observevalueforkeypath:(nsstring *)keypath ofobject:(id)object change:(nsdictionary*)change context:(void *)context
}nsnumber *newvalue = change[@"new"];
if ([newvalue integervalue] < 90)
}//用kvo也實現了小孩和保姆之間的通訊,小孩可以脫離保姆而存在,進行解耦合,如果想換乙個照顧小孩的類,只要在類中新增觀察者,並且實現觀察者方法就可以。
}- (void)dealloc
@end
iOS開發 KVO觀察容器類
nsmutablearray nsmutabledictionary nsmutableset project型別為mac os x commandline tooles首先實現資料類,有三個屬性,分別是這三個集合類的物件 dataclass.h dataclass.h kvo qhy create...
iOS開發通訊知識
互動 通訊 過程 客戶端向伺服器發起請求,伺服器接收到請求之後,向客戶端作出相應.請求 客戶端向伺服器索要資料 相應 伺服器向客戶端返回資料 構建請求步驟 1.明確url,建立url,nsurl 2.建立請求 nsurlrequest 3.建立請求連線,發起請求 nsurlconnection 同步...
IOS之KVC和KVO 未完待續
kvc key value coding 作用 1 kvc可以給物件的私有變數賦值 2 用於字典轉模型 到後面用mjextension 3 通過kvc取出私有變數值 4 模型物件轉字典 了解 利用kvc賦值 利用kvc取值 使用注意 1 設定key keypath位置的字串必須保證有對應的屬性 或者...