При работе с пользовательским подклассом NSOperation
я заметил, что автоматическая проверка значения ключа отключена методом класса [NSOperation automaticallyNotifiesObserversForKey]
(который возвращает NO
по крайней мере для некоторых путей ключа). Из-за этого код внутри подклассов NSOperation
усеян ручными вызовами willChangeValueForKey:
и didChange…
, как видно во многих образцах кода в Интернете.
Почему это делает NSOperation
? С автоматической поддержкой KVO люди могли просто объявлять свойства для флагов жизненного цикла операции (isExecuting
и т.д.) И запускать события KVO через аксессоров, т.е. следующий код:
[self willChangeValueForKey:@"isExecuting"];
executing = NO;
[self didChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
... можно заменить следующим:
[self setIsExecuting:NO];
[self setIsFinished:YES];
Есть ли какой-нибудь улов? Я просто переопределял automaticallyNotifiesObserversForKey
, чтобы вернуть YES
, и все выглядит нормально.