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:官方文档
Key-Value
Observing Done Right:官方 KVO 实现的缺陷
MAKVONotificationCenter:一个改良的Notification 实现,托管在 GitHub 上
Friday Q&A 2009-01-23
深入浅出Cocoa 之动态创建类
深入浅出Cocoa之类与对象