3 回答
TA贡献1834条经验 获得超8个赞
使用KVO观察operations队列的属性,然后通过检查可以判断队列是否已完成[queue.operations count] == 0。
在您正在执行KVO的文件中的某处,像这样声明KVO的上下文(更多信息):
static NSString *kQueueOperationsChanged = @"kQueueOperationsChanged";
设置队列时,请执行以下操作:
[self.queue addObserver:self forKeyPath:@"operations" options:0 context:&kQueueOperationsChanged];
然后在您的observeValueForKeyPath:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
if (object == self.queue && [keyPath isEqualToString:@"operations"] && context == &kQueueOperationsChanged) {
if ([self.queue.operations count] == 0) {
// Do something here when your queue has completed
NSLog(@"queue has completed");
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
}
(这是假设您NSOperationQueue位于名为的属性中queue)
在对象完全解除分配之前(或当它停止关心队列状态时),在某些时候,您需要像这样从KVO注销:
[self.queue removeObserver:self forKeyPath:@"operations" context:&kQueueOperationsChanged];
附录:iOS 4.0具有一个NSOperationQueue.operationCount属性,根据文档,该属性符合KVO。但是,此答案在iOS 4.0中仍然有效,因此对于向后兼容仍然有用。
- 3 回答
- 0 关注
- 1427 浏览
添加回答
举报