【问题标题】:why use "willChangeValueForKey:" in SDWebImage?为什么在 SDWebImage 中使用“willChangeValueForKey:”?
【发布时间】:2015-08-31 05:36:18
【问题描述】:

SDWebImageView lib中有一个名为“SDWebImageDownloaderOperation”的类,其方法如下。

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

然而rs并没有覆盖automaticallyNotifiesObserversForKey:,也没有实现observeValueForKeyPath:ofObject:change:context:方法,那么写的目的是什么

[self willChangeValueForKey:@"isFinished"]

 [self didChangeValueForKey:@"isFinished"]

【问题讨论】:

    标签: ios sdwebimage


    【解决方案1】:

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

    Apple 建议 here 显式调用 willChangeValueForKeydidChangeValueForKey

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

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多