我目前正在重新设计我现有的应用程序,从CoreData存储到一个基于文档的应用程序,使用UIDocument子类。这主要是为了引入iCloud同步,因为iCloud同步在CoreData中一直存在问题。
在某些地方,我可以很容易地用相应的CoreData处理替换UIDocument使用,但是在某些地方,我真的很难用异步代码替换同步代码。主要是当我需要动态打开一些文档时,只需要快速访问,例如在计算期间。
我已经实现了例如调度组,以等待UIDocument操作,但在某些地方,这似乎并不合适。例如,当需要按顺序打开大量文档以完成计算时,这将导致非常复杂和奇怪的块和调度组链接。
为了更好地理解这个问题,让我粗略地描述一下我的应用程序使用的是什么文档:
因此,基本上,对于一个用户,和两年的应用程序使用,可以有大约50个文档需要按需显示,并用于计算。
用户文档将始终打开并加载到内存中,我在这里看不到问题。对于其他文档,这并不容易,因为我需要动态加载它们,也可能是来自当前不活动的其他用户的文档(这消除了在内存中为当前用户加载所有文档的可能性)。
所以,,我的主要问题是,在处理大量文档时,什么方法是好的?
我敢打赌,将所有文档加载到内存中也是一个坏主意,这也涉及到iCloud同步。
是否有任何同步API,或强制同步/同步API包装器用于UIDocument**?** 的示例?
发布于 2014-06-11 14:49:54
通过强制当前线程在一个条件下等待,可以同步打开多个文档:
- (void)openDocumentsSynchronously:(NSArray *)documents
{
__block NSUInteger waitingOnDocuments = documents.count;
NSCondition *condition = [NSCondition new];
for (UIDocument *document in documents)
{
[document openWithCompletionHandler:^(BOOL success) {
waitingOnDocuments--;
[condition lock];
[condition broadcast];
[condition unlock];
}];
}
while (waitingOnDocuments > 0)
{
[condition lock];
[condition wait];
[condition unlock];
}
}不过,我不建议在主线程上这样做,因为打开文档可能需要一段时间。
https://stackoverflow.com/questions/23151526
复制相似问题