为什么要使用" willChangeValueForKey:"在SDWebImage中?

时间:2015-08-31 05:36:19

标签: ios sdwebimage

有一个名为" SDWebImageDownloaderOperation"在SDWebImageView lib中有以下方法。

- (void)setFinished:(BOOL)finished {
    [self willChangeValueForKey:@"isFinished"];
    _finished = finished;
    [self didChangeValueForKey:@"isFinished"];
}

但是,rs不会覆盖automaticallyNotifiesObserversForKey:并且不会实现observeValueForKeyPath:ofObject:change:context:方法,那么编写的目的是什么

[self willChangeValueForKey:@"isFinished"]

 [self didChangeValueForKey:@"isFinished"]

1 个答案:

答案 0 :(得分:1)

这里的关键原因是SDWebImageDownloaderOperationNSOperation的子类,并且此类不能像所有其他类一样使用普通KVO通知。 此操作在后台执行某项任务,因此您需要在操作完成以及何时仍在运行时通知操作系统。

Apple建议here明确调用willChangeValueForKeydidChangeValueForKey

如果您正在寻找更好的解释,为什么NSOPerations没有正常的KVO,您可以阅读此答案Why does NSOperation disable automatic key-value observing?