亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOSKey-ValueObserving(KVO)

2019-11-14 18:50:47
字體:
來源:轉載
供稿:網友

  kvo,與觀察者模式類似,通過給指定的對象設置觀察者,來檢測對象的變化,當指定的對象的屬性被修改后,用于作為觀察者的對象會接收到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改后,kvo就會自動通知相應的觀察者。系統框架已經支持kvo,所以在開發過程中可以直接使用,非常方便。

一、kvo的使用步驟

1、注冊,指定被觀察者的屬性

2、實現回調方法

3、移除觀察

二、通過現實中的小例子介紹一下kvo的用法

  我有一張銀行卡,只要卡內的金額發生的改變,銀行就會發短信給我提示,下面通過代碼使用kvo來模擬一下這個過程

  先創建一個Card銀行卡類,卡里有money金額的屬性,在初始化這張卡的時候,給卡里金額設置一個初值1000,然后每隔1秒鐘模擬消費10元,代碼如下:

  Card.h

//  Card.h//  KVO////  Created by jerei on 15-6-5.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import <Foundation/Foundation.h>@interface Card : NSObject@PRoperty (nonatomic, assign) float money;@end

  Card.m

//  Card.m//  KVO////  Created by jerei on 15-6-5.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import "Card.h"@implementation Card-(instancetype)init{    if (self = [super init]) {        _money = 1000.0;                [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(changeMoney) userInfo:nil repeats:YES];    }    return self;}//改變卡內金額-(void)changeMoney{    self.money -= 10;    }@end

  再創建一個People人類,在這個類中有姓名name和card銀行卡兩個屬性。

  People.h

//  People.h//  KVO////  Created by jerei on 15-6-5.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import <Foundation/Foundation.h>@class Card;@interface People : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, strong) Card *card;-(id)initWithName:(NSString *)name andCard:(Card *)card;@end

  People.m

//  People.m//  KVO////  Created by jerei on 15-6-5.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import "People.h"#import "Card.h"@implementation People-(id)initWithName:(NSString *)name andCard:(Card *)card{    if (self = [super init]) {        _name = name;        _card = card;    }        return self;}@end

  創建好了兩個類之后,在People類中通過kvo來監測銀行卡中金額的變化

1、人需要監聽銀行賬戶中的金額,需要注冊監聽對象

- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;

  調用方法的是被監聽的對象,參數分別為:

addObserver:觀察者

forKeyPath:被監聽的對象的屬性,屬性里面還有屬性的,可以用點語法

options:想監聽的對象是什么操作,比如初始化、有新的值

context:上下文,一般為nil,當KeyPath:相同時,可以用它來區分

  因此,在People.m中需要添加的代碼為:

-(id)initWithName:(NSString *)name andCard:(Card *)card{    if (self = [super init]) {        _name = name;        _card = card;           //注冊,添加觀察者        [_card addObserver:self forKeyPath:@"money" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];    }        return self;}

2、一旦注冊了,就可以去回調函數中感知變化過程

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

observeValueForKeyPath:字符串,被監聽的屬性

ofObject:哪一個對象被監聽

change:字典,包含了變化前和變化后的值

context:上下文

  因此,在People.m中需要實現回調方法

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    NSLog(@"回調方法 %@",change);}

3、解除監聽對象

- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

  調用方法的是被監聽的對象

removeObserver:觀察者

forKeyPath:字符串

  因此,在People.m中重寫dealloc方法,實現移除監聽者

-(void)dealloc{    [_card removeObserver:self forKeyPath:@"money"];}

4、ps: kvo屬性值改變時,不能直接改值

  例子中Card類中有一個changeMoney方法,在這個方法中修改了被監聽屬性的值,下面介紹4中方法給大家。

-(void)changeMoney{    //不能直接改值!?。?!    _money -= 10; //錯誤的        //1.點語法    self.money -= 10;        //2. set方法    float f = _money-10;    [self setMoney:f];        //3. kvc    [self setValue:@(f) forKey:@"money"];        //4.    [self willChangeValueForKey:@"money"];    _money -= 10;    [self didChangeValueForKey:@"money"];    }

 

  如有疑問咨詢或技術交流,請加入官方QQ群:JRedu技術交流 (452379712)

作者:杰瑞教育
出處:http://www.49028c.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美中文第一页| 欧美老少配视频| 国产69精品99久久久久久宅男| 欧美激情在线观看视频| 亚洲视频一区二区| 欧美午夜精品久久久久久久| www.99久久热国产日韩欧美.com| 国产精品美腿一区在线看| 亚洲三级av在线| 国产一区香蕉久久| 波霸ol色综合久久| 久久99视频免费| 欧美另类交人妖| 久久精品影视伊人网| 亚洲最大的免费| 亚洲成人网久久久| 欧美美女操人视频| 91中文精品字幕在线视频| 亚洲成人av片在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 成人久久久久爱| 国产一区深夜福利| www.国产精品一二区| 亚洲精品久久久久久久久久久久| 欧美激情综合色综合啪啪五月| 日韩精品在线观看一区| 日韩欧美在线视频日韩欧美在线视频| 成人激情视频小说免费下载| 日韩精品免费在线视频观看| 国产精品露脸自拍| 日本电影亚洲天堂| 国产丝袜一区视频在线观看| 亚洲欧美变态国产另类| 久久久久久久av| 亚洲级视频在线观看免费1级| 精品久久久一区| 国产精品高潮呻吟久久av黑人| 亚洲精品国产电影| 欧美尤物巨大精品爽| 久久久精品欧美| 亚洲国产精品久久久| 影音先锋日韩有码| 精品久久久久久久久久久久久| 日韩欧美一区视频| 欧美片一区二区三区| 亚洲午夜女主播在线直播| 亚洲第一精品久久忘忧草社区| 欧美精品在线播放| 亚洲视屏在线播放| 2024亚洲男人天堂| 中文字幕亚洲国产| 亚洲欧洲在线看| 欧美综合激情网| 国产精品视频一| 色综合久综合久久综合久鬼88| 久久精视频免费在线久久完整在线看| www.欧美视频| 97在线观看视频国产| 国产精品夜色7777狼人| 91精品视频免费看| 成人在线精品视频| 欧美激情视频网站| 国产亚洲aⅴaaaaaa毛片| 欧美国产日韩xxxxx| 欧美最猛性xxxx| 一区二区欧美激情| 原创国产精品91| 欧美极品少妇xxxxⅹ喷水| 欧美激情精品久久久久久变态| 欧美一级淫片丝袜脚交| 久久91亚洲精品中文字幕奶水| 福利精品视频在线| 2020久久国产精品| 最近2019年手机中文字幕| 久久久人成影片一区二区三区观看| 国产视频在线一区二区| 国产精品青草久久久久福利99| 亚洲福利视频在线| 岛国av一区二区| 精品在线小视频| 久久天天躁狠狠躁夜夜躁| 国产最新精品视频| 久久精品成人欧美大片古装| 国产精品自产拍在线观| 欧美性xxxxx极品娇小| 欧美成人精品不卡视频在线观看| 欧美日韩美女在线观看| 亚洲日本成人女熟在线观看| 国产精品视频一区二区三区四| 日韩精品视频免费在线观看| 亚洲精品国产精品久久清纯直播| 精品亚洲一区二区三区在线播放| 国产欧美日韩精品丝袜高跟鞋| 欧美精品一二区| 日本aⅴ大伊香蕉精品视频| 精品人伦一区二区三区蜜桃免费| 韩日欧美一区二区| 欧美精品一区二区三区国产精品| 国产精品中文字幕在线观看| 精品国产欧美一区二区三区成人| 91探花福利精品国产自产在线| 最近更新的2019中文字幕| 91精品国产91| 美女少妇精品视频| 欧洲亚洲妇女av| 日本欧美在线视频| 久久久久久亚洲精品| 精品国偷自产在线视频99| 亚洲91精品在线观看| 国产一区二区精品丝袜| 日韩在线视频免费观看| 三级精品视频久久久久| 欧美大尺度电影在线观看| 久久久久亚洲精品国产| 国产成人拍精品视频午夜网站| 日韩在线视频中文字幕| 91av免费观看91av精品在线| 欧美大片免费观看在线观看网站推荐| 中文字幕欧美精品在线| 狠狠色狠狠色综合日日五| 国产精品一区二区久久精品| 亚洲第一区第一页| 91精品久久久久久久| 国产免费久久av| 国产精品尤物福利片在线观看| 成人免费xxxxx在线观看| 国产精品久久77777| 91久久精品国产91性色| 欧美日韩性视频在线| 日韩av免费在线观看| 欧美亚州一区二区三区| 亚洲欧洲黄色网| 欧美大秀在线观看| 久久福利网址导航| 日韩欧美成人精品| 日韩精品视频在线观看免费| www欧美xxxx| 欧美交受高潮1| 国产一区二区视频在线观看| 欧美激情一区二区三区高清视频| 韩曰欧美视频免费观看| 国内精品美女av在线播放| 国产精品久久久久久久久久99| 久久久久久国产免费| 久久久久久一区二区三区| 亚洲第一男人天堂| 国产99久久精品一区二区 夜夜躁日日躁| 久久久国产精品一区| 国产精品久久久久av| 欧美怡红院视频一区二区三区| 久久精品国产一区二区三区| 欧美在线视频一区| 日韩av免费在线观看| 久久久极品av| 日韩欧美国产中文字幕| xxxx性欧美| 亚洲精品久久久久久久久| 最近2019年日本中文免费字幕| 欧美成人精品在线| 国产成一区二区| 国产精品一久久香蕉国产线看观看| 国产成人久久精品| 欧美性xxxxx极品| 欧美插天视频在线播放|