有一个名为" 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"]
答案 0 :(得分:1)
这里的关键原因是SDWebImageDownloaderOperation
是NSOperation
的子类,并且此类不能像所有其他类一样使用普通KVO
通知。
此操作在后台执行某项任务,因此您需要在操作完成以及何时仍在运行时通知操作系统。
Apple建议here明确调用willChangeValueForKey
和didChangeValueForKey
。
如果您正在寻找更好的解释,为什么NSOPerations
没有正常的KVO,您可以阅读此答案Why does NSOperation disable automatic key-value observing?