1 開發技巧
1.1 常見問題
1.1.1 kvo通知沒有發出來問題
KVO通知發起機制:
KVO中屬性變化後,通知的發出是在屬性的setter方法中發起的,所以屬性賦值時,一定要用.操作符或者用方法調用,而不能直接用內部成員賦值的方法。
WS(weakSelf);
[HJComInstance getEntity:_entity WithUserEntity:userEntity WithCompleteBlock:^(HJResultData*reData){
HJPreEntity*preEntity;
if (reData.errCode == HJCode_Success) {
preEntity = reData.resultData;
}
if(preEntity) {
weakSelf.preType = HJPreType_Done;
//不會發出kvo通知
_preType = HJPreType_Done;
}
}];
通知接收邏輯:
//添加對praiseType屬性的監聽
[self.mEntity addObserver:self forKeyPath:@"preType" options:NSKeyValueObservingOptionNew context:nil];
#pragma mark 重寫observeValueForKeyPath方法,當屬性變化後此處獲得通知
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{
if([keyPath isEqualToString:@"preType"]){、
if (object == _mEntity) {
[self loadSubViews];
}
}
}
- (void)dealloc
{
[self.mEntity removeObserver: self forKeyPath:@"preType"];
}
2 參考鏈接
iOS開發系列--Objective-C之KVC、KVO
http://www.cnblogs.com/kenshincui/p/3871178.html
KVOController
https://github.com/facebook/KVOController
iOS:KVO的概述與使用
http://blog.csdn.net/yuquan0821/article/details/6646400
[深入淺出Cocoa]詳解鍵值觀察(KVO)及其實現機理
http://blog.csdn.net/kesalin/article/details/8194240
Key-value observing:官方文檔
Observing Done Right:官方 KVO 實現的缺陷
MAKVONotificationCenter:一個改良的Notification 實現,託管在 GitHub 上
Friday Q&A 2009-01-23