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

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

[oc學習日記]kvc,kvo和通知

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

KVC鍵值對編碼

kvc鍵值對編碼就是在對象沒有聲明屬性(畢竟能用點方法沒幾個人會再去用kvc),成員變量沒有公有化,并且沒有寫描述方法時使用的一種給成員變量或者屬性賦值的一種方式。

例如:

        //我們創建了一個學生類,并將其實例化        Student *stu = [[Student alloc]init];        //給學生隊形的name成員變量使用kvc賦值        [stu setValue:@"ss" forKey:@"name"];        //取出使用鍵值對進行賦值了的name成員變量的值        NSLog(@"%@",[stu valueForKey:@"name"]);

 

如果此時學生有一本書,并且這個書有名字,那我們該怎么在學生對象中輸出這本書的名字呢

        //首先要用下面這個方法給書的名字進行賦值        [stu setValue:@"語文" forKeyPath:@"book.name"];        //而且要在學生類中定義一個book類的對象,而且這個變量的name的成員變量必須要添加@public或者定義屬性,否則學生類中無法訪問book的name        Book *book ;

KVO鍵值觀察

沒有kvc就沒有kvo,當對象屬性或者成員變量的值通過kvc發生變化時,kvo就會觀察到值的變化,并且做出反應

kvo有三個步驟:

要另外寫一個觀察者類

1.注冊成為觀察者

1 -(void)registerWatch{2     //第一個參數:被觀察的對象,第二個參數:觀察者的對象,第三個參數:被觀察的對象的屬性或者變量名,第四個參數:接收到變化的通知時,給我們展示的內容3     [_stu addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];4 }

2.重寫observeValueForKeyPath方法

1 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{2     NSLog(@"%@",keyPath);//(被觀察者)發生改變的變量或屬性名3     4     NSLog(@"%@",object);//被觀察者5     NSLog(@"%@",change);//屬性或變量改變前后的值(字典)new:改變后   old:改變前6     NSLog(@"%@",[change objectForKey:@"new"]);7 }

3.移除kvo

-(void)dealloc{    //移除kvo    [_stu removeObserver:self forKeyPath:@"name"];}

如何使用kvo:

在主函數中實例化一個觀察者對象,將其注冊成為觀察者對象

如果被觀察者的成員變量活著屬性發生變化就會根據observeValueForKeyPath方法輸出相應內容

 

通知

通知模式就是通知中心發送信息,如果觀察者(接受信息者)監聽(接收)到了信息,那么會做出一定的回應

通知模式的使用:

1. 注冊通知

-(void)addNotifi{    //在通知中心注冊通知:第一個參數,代表通知接收對象,第二個參數:代表接收到通知后調用的方法,第三個參數:代表通知的名字 最后一個參數不用管,直接給nil    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receive:) name:@"Notifi" object:nil];}

 2.接收到信息作出反應的方法

//如果通知包含參數,那么方法定義時,需要一個通知的對象作為參數-(void)receive:(NSNotification *)note{       NSLog(@"收到通知");//    NSLog(@"%@",note.object);//此處的note.object就代表發送通知時傳過來的信息    //    傳過來的是什么類型的參數,我們就用什么類型的變量進行處理//    NSDictionary *dic = note.object;//    NSLog(@"--%@",dic);        NSLog(@"%@",note.userInfo);//此處的userinfo就代表發送通知時,傳過來的userinfo}

3.移除通知

-(void)dealloc{    //移除通知,避免消耗內存 ,第一個參數,代表之前注冊的通知接收對象,第二個參數,代表注冊時寫的通知名字    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"Notifi" object:nil];}

通知模式的使用

在main函數中

        Student *stu = [Student new];        //將學生對象添加為觀察者(監聽者)        [stu addNotifi];                //第一個參數:傳入通知名字,告訴通知中心,給哪個通知發消息,注意,此處的名字要與之前注冊的名字完全一致,第二個參數,代表發送通知時附帶的參數或信息        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"a", nil];//        [[NSNotificationCenter defaultCenter] postNotificationName:@"Notifi" object:dic];                //userInfo是通知的一個變量,也可以用來傳參        [[NSNotificationCenter defaultCenter]postNotificationName:@"Notifi" object:nil userInfo:dic];

 

 

kvo與通知模式的比較:

通知模式是由通知中心發送(不可控),kvo是由kvc進行賦值(可控)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久91亚洲精品中文字幕奶水| 亚洲黄色www网站| 2020欧美日韩在线视频| 亚洲福利小视频| 亚洲国产成人久久综合一区| 亚洲精品免费一区二区三区| 亚洲97在线观看| 中文字幕自拍vr一区二区三区| 欧美午夜宅男影院在线观看| 亚洲激情视频在线| 九九热99久久久国产盗摄| 久久久在线观看| 成人精品视频99在线观看免费| 欧美激情一区二区三区在线视频观看| 日韩在线视频中文字幕| 亚洲欧美日韩区| 久久久av亚洲男天堂| 久久久综合av| 曰本色欧美视频在线| 欧美高清性猛交| 欧美电影免费看| 国产精品视频在线观看| 亚洲精品mp4| 久久综合伊人77777蜜臀| 日韩中文字幕亚洲| 成人在线视频网| 亚洲天堂网在线观看| 国产精品夫妻激情| 国产精品wwww| 日韩欧美国产成人| 欧洲永久精品大片ww免费漫画| 一区二区国产精品视频| 亚洲在线免费观看| 成人欧美一区二区三区在线湿哒哒| 国产日韩精品一区二区| 久久影院免费观看| 91爱视频在线| 81精品国产乱码久久久久久| 91中文字幕在线观看| 欧美在线观看网站| 国产精品一区=区| 欧美巨大黑人极品精男| 91在线免费观看网站| 成人午夜高潮视频| 国产精品免费一区| 国产精品678| 亚洲一级黄色av| 亚洲风情亚aⅴ在线发布| 国产精品99一区| 一个人看的www久久| 国产91九色视频| 国产午夜精品美女视频明星a级| 久久久精品视频在线观看| 国产成人精品久久亚洲高清不卡| 欧美亚洲另类在线| 欧美寡妇偷汉性猛交| 亚洲的天堂在线中文字幕| 免费97视频在线精品国自产拍| 成人精品视频久久久久| 国产精品免费久久久久影院| 欧美亚洲国产日韩2020| 午夜精品在线观看| 亚洲最大福利网| 欧美专区在线观看| 日韩精品亚洲视频| 久久人人爽人人爽爽久久| 国产精品美腿一区在线看| 欧美日韩国产丝袜另类| 日韩欧美国产激情| 国产精品久久久久久久久久久不卡| 亚洲国产美女精品久久久久∴| 欧美国产精品va在线观看| 久久人体大胆视频| 亚洲国语精品自产拍在线观看| 欧美性猛交丰臀xxxxx网站| 91免费福利视频| 亚洲国产高清福利视频| 狠狠躁夜夜躁人人爽超碰91| 欧美成人精品三级在线观看| 68精品久久久久久欧美| 4438全国亚洲精品在线观看视频| 精品国产欧美一区二区五十路| 久久久久久噜噜噜久久久精品| 成人精品一区二区三区电影免费| 欧美精品少妇videofree| 热久久这里只有精品| 色狠狠久久aa北条麻妃| 欧美激情视频网| 欧美日韩国产va另类| 色七七影院综合| 国产日韩欧美中文| 97在线观看视频| 色伦专区97中文字幕| 国产精品高潮在线| 亚洲va码欧洲m码| 欧美性猛交xxxx| 国产成人精品一区二区三区| www.久久色.com| 亚洲成人国产精品| 亚洲电影免费观看高清完整版在线观看| 亚洲综合视频1区| 日韩大片免费观看视频播放| 欧美成人精品不卡视频在线观看| 亚洲美女性视频| 一区二区欧美激情| 国产精品久久久久久久久久小说| 成人444kkkk在线观看| 欧美乱大交xxxxx| 九九热精品视频| 亚洲国产精品va在线观看黑人| 日韩欧美精品在线观看| 亚洲欧美日韩一区在线| 亚洲综合中文字幕在线观看| 欧美激情视频在线观看| 亚洲福利视频网站| 国产精品久久久久久网站| 尤物九九久久国产精品的特点| 亚洲精品国产精品乱码不99按摩| 成人免费在线网址| 91亚洲永久免费精品| 欧美一级大胆视频| 亚洲午夜性刺激影院| 亚洲电影免费在线观看| 久久视频这里只有精品| www.亚洲男人天堂| 国产精品你懂得| 国产精品女人久久久久久| 亚洲精品国产精品久久清纯直播| 91九色蝌蚪国产| 亚洲激情视频网| 亚洲国产欧美久久| www.日韩免费| 精品视频在线播放免| 中文字幕自拍vr一区二区三区| 色一情一乱一区二区| 精品在线欧美视频| 最新国产精品亚洲| 国产日产亚洲精品| 欧美精品18videos性欧| 欧美精品在线观看91| 亚洲一区二区三区sesese| 久久露脸国产精品| 国产在线观看一区二区三区| 九九精品视频在线| 国产成人av在线| 一区二区成人精品| 亚洲视频综合网| 国产精品美女在线| 国产视频亚洲视频| 国产激情久久久| 精品电影在线观看| 久久久久久久久久久av| 亚洲自拍偷拍一区| 九九精品在线播放| 日韩电影中文字幕一区| 久久久精品一区| 最近2019中文字幕mv免费看| 中文字幕久精品免费视频| 亚洲乱码国产乱码精品精| 国产精品狠色婷| 久久精品视频网站| 2019精品视频| 成人精品在线观看| 九九精品视频在线观看|