NS操作和关键价值观察

Inf*_*ies 1 iphone objective-c nsoperation nsoperationqueue

我正在创建一个MyOperation对象(继承自NSOperation)并添加到NSOperationQueue.然后我在MyOperation上做KVO.我正在使用这种方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
Run Code Online (Sandbox Code Playgroud)

如果完成,从MyOperation获取值.在这个方法中,我使用其他类的方便方法来获取其他数据.

也许这里的observeValue ...方法有同步问题吗?

Gil*_*esB 12

我没有足够的声誉评论或投票,但我会低估dannywartnaby的答案.NSOperation在其操作中本质上使用KVO; 必须实现isFinished和isExecuted作为处理的一部分,例如100%KVO并且是操作与客户端/队列的所需合同的一部分.所以建议应该避免这些是不准确的; NSOperation使用KVO本身,因此采用dannywartnaby的前提将表明NSOperation的实施本身存在缺陷,但绝对不是这样.

不可否认,开发人员必须注意正确使用KVO,尽管我认为继承NSOperation是一项非常重要的任务,可能留给更有经验的Objective-C程序员.有人可能会说,通知对于某项行动所开展的工作来说过于粗糙,虽然并非总是如此,但我认为在提出建议时必须小心谨慎,以确保错误信息不是最佳做法.Danny,您是否愿意详细说明为什么在使用NSOperation或线程时不建议使用KVO?NSOperation实施的许多例子都使用KVO ......