我填充NSOutlineView递归阅读目录。 后一个目录及其子目录被读我刷新轮廓主叫reloadData一个调度内像下面所示UI刷新,NSOutlineView reloadData和递归方法
-(void)readDir:(NSString*)path {
dispatch_async(dispatch_get_main_queue(), ^{ \
[outlineView reloadData];
});
//////////
//// some internal stuff
//////////
NSArray* subs = [self getSubDirs:path];
for (NSString* p in subs) {
[self readDir:p];
}
}
上述方法,是从一个调度内被称为具有UI反应
- (void)startAll {
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_async(queue, ^{
[self readDir:@"/"];
});
}
的问题是,有时dispatch_async(dispatch_get_main_queue(),...)在子目录正在读取时调用(它是异步的!)和应用程序崩溃
如果我使用dispatch_sync(dispatch_get_main_queue(),...) 同步版本)的轮廓正确总是画,但它是非常非常slooooow所以问题是:
我怎么可以重新排列代码以尽可能快的是,等待那DISPATCH-[A]同步(dispatch_get_main_queue() , ...) 已完成?
确实要删除(不加)项目阵列作为数据的问题似乎与资源。我已经解决了删除主队列中使用的代码块内的项目,似乎工作,但我不确定 – dafi