iOS KVO的使用

1.KVO通知(Notification)同屬于觀察者模式.
2.觀察者模式的定義:
觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)上發(fā)生變化時,會通知所有觀察者對象,使它們能夠自動更新自己膀捷。 簡而言之茎截,就是A和B奋献,A對B的變化感興趣案训,就注冊為B的觀察者,當B發(fā)生變化時通知A速警,告知B發(fā)生了變化灌闺。這個也叫做經(jīng)典觀察者模式。
3.觀察者模式的介紹
設計模式之觀察者模式

具體使用如下:
#import <Foundation/Foundation.h>

@interface ProductInfoModel : NSObject

@property (nonatomic,strong) NSString *name;
@property (nonatomic,strong) NSString *price;
@property (nonatomic,assign) float number;

@end

#import "ProductInfoModel.h"

@implementation ProductInfoModel

@end
- (void)viewDidLoad {
    [super viewDidLoad];

    infoModel = [[ProductInfoModel alloc]init];
    [infoModel addObserver:self
                forKeyPath:@"number"
                   options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                   context:nil];
}

#pragma mark 監(jiān)聽代理
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"number"])
    {
        NSLog(@"%@",[object valueForKey:@"number"]);
        NSLog(@"ChangeInfo:%@",change);
    }
}

#pragma mark 改變所要監(jiān)聽的對象的值
- (IBAction)changeNumber:(id)sender
{
    UIStepper *stepper = (UIStepper *)sender;
    [infoModel setValue:[NSString stringWithFormat:@"%.f",stepper.value] forKey:@"number"];
}


#pragma mark 釋放觀察者
- (void)dealloc
{
    [infoModel removeObserver:self forKeyPath:@"number"];
}

說明:

1.注冊觀察者時options的作用
NSKeyValueObservingOptionNew是記錄最新的數(shù)值坏瞄,NSKeyValueObservingOptionOld是記錄上一個數(shù)值桂对,如果我們只設置其中一個,觀察者也就只記錄一個鸠匀。我們可以在監(jiān)聽代理的change中查看對應的數(shù)據(jù)蕉斜,如上,我設置了NSKeyValueObservingOptionNewNSKeyValueObservingOptionOld 兩個類型,觀察者記錄infoModelnumber屬性的數(shù)據(jù)變化也就如下宅此,

2017-06-02 09:18:39.981605+0800 KVO的使用[5489:1643164] 1
2017-06-02 09:18:39.982226+0800 KVO的使用[5489:1643164] ChangeInfo:{
    kind = 1;
    new = 1;
    old = 0;
}
2017-06-02 09:18:40.464422+0800 KVO的使用[5489:1643164] 2
2017-06-02 09:18:40.465041+0800 KVO的使用[5489:1643164] ChangeInfo:{
    kind = 1;
    new = 2;
    old = 1;
}

2.監(jiān)聽代理中的keyPath一定要和注冊觀察者時的keyPath一樣机错,不然會監(jiān)聽不到對應值的變化。
3.注冊觀察者和移除觀察者一定要成對出現(xiàn)父腕。我們可以在dealloc中移除觀察者弱匪,也可以在適當?shù)臅r候手動移除觀察者。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末璧亮,一起剝皮案震驚了整個濱河市萧诫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枝嘶,老刑警劉巖帘饶,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異群扶,居然都是意外死亡及刻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門竞阐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缴饭,“玉大人,你說我怎么就攤上這事骆莹≤畋猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵汪疮,是天一觀的道長峭火。 經(jīng)常有香客問我,道長智嚷,這世上最難降的妖魔是什么卖丸? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮盏道,結果婚禮上稍浆,老公的妹妹穿的比我還像新娘。我一直安慰自己猜嘱,他們只是感情好衅枫,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朗伶,像睡著了一般弦撩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上论皆,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天益楼,我揣著相機與錄音猾漫,去河邊找鬼。 笑死感凤,一個胖子當著我的面吹牛悯周,可吹牛的內容都是我干的。 我是一名探鬼主播陪竿,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼禽翼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了族跛?” 一聲冷哼從身側響起闰挡,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庸蔼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贮匕,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡姐仅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刻盐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掏膏。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敦锌,靈堂內的尸體忽然破棺而出馒疹,到底是詐尸還是另有隱情,我是刑警寧澤乙墙,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布颖变,位于F島的核電站,受9級特大地震影響听想,放射性物質發(fā)生泄漏腥刹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一汉买、第九天 我趴在偏房一處隱蔽的房頂上張望衔峰。 院中可真熱鬧,春花似錦蛙粘、人聲如沸垫卤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穴肘。三九已至,卻和暖如春舔痕,著一層夾襖步出監(jiān)牢的瞬間梢褐,已是汗流浹背旺遮。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盈咳,地道東北人耿眉。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像鱼响,于是被迫代替她去往敵國和親鸣剪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容

  • KVO 簡介 KVO<NSKeyValueObserving>丈积,是一個非正式協(xié)議筐骇,提供了一個途徑,使對象(觀察者)...
    碳酸補鈣專家閱讀 11,239評論 3 7
  • 上半年有段時間做了一個項目江滨,項目中聊天界面用到了音頻播放铛纬,涉及到進度條,當時做android時候處理的不太好唬滑,由于...
    DaZenD閱讀 3,018評論 0 26
  • KVO 的基本概念(Key Value Observing) 基本概念鍵值觀察是一種使對象獲取其他對象的特定屬性變...
    生如夏花逝如秋葉閱讀 1,283評論 0 1
  • 【原】iOS下KVO使用過程中的陷阱KVO晶密,全稱為Key-Value Observing擒悬,是iOS中的一種設計模式...
    nadou23閱讀 1,961評論 0 0
  • KVO 作為 iOS 中一種強大并且有效的機制,為 iOS 開發(fā)者們提供了很多的便利稻艰;我們可以使用 KVO 來檢測...
    JzRo閱讀 940評論 0 2