2015-08-31 1 views
0

В SDWebImageView lib есть класс под названием «SDWebImageDownloaderOperation», который имеет следующий метод.зачем использовать «willChangeValueForKey:» в SDWebImage?

- (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

Основная причина в том, что SDWebImageDownloaderOperation является подклассом NSOperation, и этот класс не работает с обычным уведомлением KVO, как и все другие классы. Эта операция выполняет некоторую задачу на фоне, поэтому вам нужно сообщить операционную систему, когда ваша операция закончена и когда она еще работает.

Apple предлагает here, чтобы позвонить по телефону willChangeValueForKey и didChangeValueForKey.

Если вы ищете лучшее объяснение, почему NSOPerations не имеют нормальный KVO вы можете прочитать этот ответ Why does NSOperation disable automatic key-value observing?

 Смежные вопросы

  • Нет связанных вопросов^_^