的NSOperation和关键值观测(NSoperation and key value obser

2019-10-21 02:05发布

我创建一个MyOperation对象(从继承的NSOperation),并添加到NSOperationQueue。 然后我就MyOperation做志愿。 我用这个方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

如果完成了从MyOperation得到的值。 在这种方法中,我使用来自其他类的一个方便的方法得到一些其他数据。

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

Answer 1:

我还没有足够的声誉评论或反对票,但我会反对票dannywartnaby的答案。 的NSOperation在它的操作使用志愿本质; 不必实现isFinished和isExecuted作为处理的一部分,例如是100%KVO并且是操作与客户端/队列所需合同的一部分。 所以建议这些应避免不准确; 的NSOperation采用国际志愿者组织本身,以便采取dannywartnaby的前提下将表明的NSOperation的实施是在本身的纰漏,这绝对不是这样的。

诚然,开发商必须注意正确使用志愿,但我认为,子类的NSOperation是一个不平凡的任务可能留给更有经验的Objective-C编程。 通知,人们可以说,过于粗粒度的那种通过操作进行的工作,但并非总是如此,我认为实践建议时,以确保我们一定要小心的错误信息作为最佳实践心不是通过。 丹尼,你能详细地谈一谈为什么使用使用的NSOperation或线程志愿时,不建议? 执行的NSOperation的例子很多使用志愿...



Answer 2:

我不知道您的使用情况,但使用KVO线程/操作是不明智的。

你可以不是有你的操作对象发布通知,一旦完成。 或可替换地定义一个委托协议,让您的操作委托...然后你可以定义某种“myOperationComplete:”这是由你的操作援引反对下达,使用performSelectorOnMainThread委托方法。



文章来源: NSoperation and key value observing