【移動應用開發(fā)技術】iOS設計模式之KVO_第1頁
【移動應用開發(fā)技術】iOS設計模式之KVO_第2頁
【移動應用開發(fā)技術】iOS設計模式之KVO_第3頁
【移動應用開發(fā)技術】iOS設計模式之KVO_第4頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【移動應用開發(fā)技術】iOS設計模式之KVO

觀察者設計模式KVO也叫

“發(fā)布--訂閱”模式,很像雜志的訂閱。

讀者把名字和郵寄地址提供給發(fā)行商

發(fā)行商在發(fā)行新一期的的雜志時,就能將雜志送到每一個讀者手中原理:

訂閱者注冊成為發(fā)布者的某一屬性的觀察者

當發(fā)布者的這一屬性發(fā)生變化時,所有的觀察者都會得知該屬性的變化

KVC(鍵值編碼)是實現(xiàn)KVO的基礎與代理的功能類似,用來實現(xiàn):對象間傳遞事件、數(shù)值,但不能為自身屬性賦值觀察者設計的使用步驟1)發(fā)布者添加屬性

如一個Person類,添加屬性age@interface

AMPerson

:

NSObject

@property

(nonatomic,

strong)

NSNumber*

age;

@end2)注冊成為訂閱者

發(fā)布者調用addObserver:forKeyPath:options:context:方法,注冊其指定屬性的訂閱者-

(void)addObserver:(NSObject

*)observer

forKeyPath:(NSString

*)keyPath

options:(NSKeyValueObservingOptions)options

context:(void

*)context

如控制器創(chuàng)建一個Person對象,并成為其訂閱者self.person

=

[[AMPerson

alloc]

init];

self.person.age

=

@10;

[self.person

addObserver:self

forKeyPath:@"age"

options:NSKeyValueObservingOptionNew

context:nil];3)訂閱者實現(xiàn)observeValueForKeyPath:ofObject:change:context:方法-

(void)observeValueForKeyPath:(NSString

*)keyPath

ofObject:(id)object

change:(NSDictionary<NSString

*,id>

*)change

context:(void

*)context

如:-

(void)observeValueForKeyPath:(NSString

*)keyPath

ofObject:(id)object

change:(NSDictionary<NSString

*,id>

*)change

context:(void

*)context

{

if

(

[keyPath

isEqualToString:@"age"]

)

{

NSLog(@"%@",

change);

}

}4)發(fā)布者的屬性發(fā)生變化時訂閱者會響應

響應方法即發(fā)布者的observeValueForKeyPath:ofObject:change:context:方法

注意:必須使用KVC的賦值方式訂閱者才會響應

如:NSInteger

age

=

egerValue+1;

[self.person

setValue:@(age)

forKey:@"age"];5)訂閱者銷毀前將注冊信息刪除

發(fā)布者使用removeObserver:forKeyPath:方法刪除指定的訂閱者-

(void)removeObserver:(NSObject

*)anObserver

forKeyPath:(NSString

*)keyPath

如:-

(void)dealloc

{

[self.person

removeObserver:self

forKeyPath:@"age"];

}通知機制通知機制是基于觀察者設計模式實現(xiàn)一種對象間的通信技術。

雖然Objective-C的對象支持直接使用觀察者設計模式開發(fā),但通知機制的使用過程更加簡單

通知中心是一種多對多的通信方式,而觀察者僅僅是一對多的通信方式

通知中心:

每個應用程序都有一個實現(xiàn)通知機制的實例,稱作通知中心(NSNotificationCenter)

獲得其單例對象:+

(NSNotificationCenter

*)defaultCenter

通知中心還包含添加、刪除通知關系的方法通知的發(fā)布者:

任何對象都可以向通知中心發(fā)布消息通知的接受者:(響應者)

任何對象都可以在通知中心注冊所關心的消息,并在關系消息被發(fā)布時收到

通知對象(NSNotification)主要包含以下三個屬性:@property(readonly,

copy)

NSString

*name

//通知名

@property(readonly,

retain)

id

object

//通知的發(fā)布者

@property(readonly,

copy)

NSDictionary

*userInfo

//通知中可以攜帶的數(shù)據(jù)通知的使用過程1)起一個通知的名字

一般在發(fā)布者源文件中定義并在頭文件中聲明//AMAppView.h

extern

NSString

*

const

AMAppViewNameBtnClickedNotification;

//AMAppView.m

NSString

*

const

AMAppViewNameBtnClickedNotification

=

@"AMAppViewNameBtnClickedNotification";2)通知發(fā)布者通過通知中心發(fā)布通知

通知中心使用postNotification方法發(fā)布通知-

(void)postNotification:(NSNotification

*)notification

-

(void)postNotificationName:(NSString

*)notificationName

object:(id)notificationSender

-

(void)postNotificationName:(NSString

*)notificationName

object:(id)notificationSender

userInfo:(NSDictionary

*)userInfo

如:[[NSNotificationCenter

defaultCenter]

postNotificationName:AMAppViewNameBtnClickedNotification

object:self

userInfo:@{@"appModel":self.appModel}];3)通知接收者通過通知中心注冊想要接收的通知

使用通知中心的addObserver方法-

(void)addObserver:(id)notificationObserver

selector:(SEL)notificationSelectorname:(NSString

*)notificationName

object:(id)notificationSender

-

(id<NSObject>)addObserverForName:(NSString

*)name

object:(id)obj

queue:(NSOperationQueue

*)queue

usingBlock:(void

(^)(NSNotification

*note))block

如:[[NSNotificationCenter

defaultCenter]

addObserver:self

selector:@selector(appViewNameBtnClicked:)

name:AMAppViewNameBtnClickedNotification

object:v];4)通知接收者實現(xiàn)通知的響應方法或block-

(void)

appViewNameBtnClicked:(NSNotification*)

notification

{

NSLog(@"%@",

);

NSLog(@"%@",

notification.object);

NSLog(@"%@",

notification.userInfo);

}5)通知接收者在被銷毀或者不再想接收通知時,從通知中心移除

使用通知中心的removeObserver方法-

(void)removeObserver:(id)notificationObserver

-

(void)removeObserver:(id)notificationObserver

name:(NSString

*)notificationNameobject:(id)notifica

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論