代理,通知,kvo
代理:一般控制元件用的比較多,其實也可以用block實現,如果實現的介面比較多的話,建議用代理,如UITableview。
通知:是全域性的,而且是同步的,如果你要全域性傳送訊息,並且做的事情時間不長,不會阻塞執行緒的話,建議使用。
KVO(Key-Value Observing):它提供一種機制,當指定的物件的屬性被修改後,則物件就會接受到通知。簡單的說就是每次指定的被觀察的物件的屬性被修改後,KVO就會自動通知相應的觀察者了。
KVO是建立在KVC的基礎之上的,它通過 key path 觀察物件的值,當值發生變化的時候會收到通知。比如,你需要監聽UITableview的contentoffset那麼當,tableview滑動的時候,就會不停的收到contentoffset point值。你要監聽某一物件的值的時候,建議使用。
使用方法:
- 註冊,指定被觀察者的屬性
- 實現回撥方法
- 移除觀察
stockForKVO = [[StockData alloc] init];
[stockForKVO setValue:@"searph" forKey:@"stockName"];
[stockForKVO setValue:@"10.0" forKey:@"price"];
[stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
實現回撥方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"price"])
{
myLabel.text = [stockForKVO valueForKey:@"price"];
}
}
在最後的時候,移除觀察者
- (void)dealloc
{
[stockForKVO removeObserver:self forKeyPath:@"price"];
}
KVC(Key Value Coding):除了一般的賦值和取值的方法,我們還可以用Key-Value-Coding(KVC)鍵值編碼來訪問你要存取的類的屬性。
Student *student = [[[Student alloc]init ]autorelease];
[student setValue:@"張三" forKey:@"name"];
NSString *name = [student valueForKey:@"name"];
NSLog(@"學生姓名:%@",name);
相關文章
- iOS開發--通知,代理,KVO的區別,以及通知的多執行緒問題iOS執行緒
- block,代理,通知傳值BloC
- 一句程式碼,更加優雅的呼叫KVO和通知
- iOS Block傳值、代理傳值、通知中心iOSBloC
- UI基礎(五)之代理、通知的小結UI
- Swift iOS:KVOSwiftiOS
- KVO原理分析
- iOS KVO初探iOS
- Swift - KVO初探Swift
- iOS KVC & KVOiOS
- 深入理解KVO
- KVC/KVO 總結
- iOS KVC與KVOiOS
- iOS之KVC KVOiOS
- KVO知識點
- 使用 Block 實現 KVOBloC
- 刨根問底KVO原理
- 手動實現KVO
- 基礎 (十三) : KVC/KVO
- iOS KVC與KVO簡介iOS
- ObjC中KVO原理簡析OBJ
- KVO與KVC原理筆記筆記
- iOS KVO學習記錄iOS
- KVO使用及實現原理
- OC基礎-(四)KVC、KVO
- [譯]KVC 和 KVO詳解
- iOS KVC和KVO詳解iOS
- iOS學習心得之:KVOiOS
- KVC、KVO實現過程
- (iOS)KVO 的實現原理iOS
- IOS學習之初識KVOiOS
- KVO的內部實現
- iOS探索 KVO原理及自定義iOS
- 【iOS基礎】KVC / KVO詳解iOS
- 深度解析 Delegate 和 Notification 和 KVO
- iOS 設計模式_觀察者_KVOiOS設計模式
- delegate、notification、KVO場景差別
- 利用kvo對集合進行操作