在使用自定义NSOperation
子类时,我注意到[NSOperation automaticallyNotifiesObserversForKey]
类方法禁用了自动键值观察(它至少为某些键路径返回NO
)。正因为如此,NSOperation
子类中的代码被手动调用willChangeValueForKey:
和didChange…
弄得乱七八糟,这在web上的许多代码示例中都可以看到。
为什么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
,一切似乎都很正常。
https://stackoverflow.com/questions/3573236
复制相似问题