似乎 3.0 NDA 已被取消,所以这个问题应该是安全的。如果这违反了 NDA,请让我知道,以便我可以删除帖子,匆忙后。
我在 NSOperationQueue 上有一个非常简单的 KVO 实现。我的问题是,在针对 2.2.1 SDK 进行编译时,对于使用 3.0 的设备或使用 2.2.1 的设备,我得到了不同的 NSOperationQueue 结果。我已经在 1 个 2.2.1 的 iPod Touch、一个 3.0 的 iPod Touch 和两组具有类似设置的 iPhone 上确认了这一点。
代码如下所示:
// set observer
[self.myOperationQueue addObserver:self forKeyPath:@"operations" options:NSKeyValueObservingOptionNew context:NULL];
// implementation
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"operations"]) {
NSInteger operationCount = [[(NSOperationQueue*)object operations] count];
NSArray *operations = [(NSOperationQueue*)object operations];
}
}
根据上面的代码,运行 3.0 的设备将返回正确的 operationCount 和正确的操作。运行 2.2.1 的设备对于操作将始终返回 nil,对于 operationCount 将始终返回 0。
似乎无法确定为什么会这样。所有构建都是针对 2.2.1 编译的。
笔记
根据下面马特的回应;'object' 在 2.2.1 上为零。在 3.0 上它不是零。