【API使用系列】KVO/KVC专题

2022-03-08 14:35:18 浏览数 (2)

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之类与对象

0 人点赞