URLForUbiquityContainerIdentifier应该在主线程之外的线程中调用吗?

时间:2012-01-29 02:14:49

标签: iphone objective-c ios ios5 icloud

我已经阅读了很多有关是否应该在主线程之外调用URLForUbiquityContainerIdentifier:的冲突信息。在很多Apple的文档中,他们总是在主线程上调用这个方法。但是,我还读到,调用此方法可能会阻塞很长时间。

每个人的想法是什么?在主线程中调用它并不担心或是,总是在另一个线程中进行此调用?

1 个答案:

答案 0 :(得分:6)

NSFileManager可以阻塞,建议在与主线程不同的线程上运行。以下是使用Grand Central Dispatch在不同线程上使用iCloud Storage的片段

dispatch_queue_t globalQueue = dispatch_get_global_queue(QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(globalQueue, ^{
    NSFileManager *fileManager = [[NSFileManager alloc] init];
    NSURL *ubiquityContainer = [fileManager URLForUbiquityContainerIdentifier:nil];

    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    dispatch_async(mainQueue, ^{
        [self updateWithUbiquityContainer:ubiquityContainer];
    });
});

这是来自一篇很棒的文章:

http://oleb.net/blog/2011/11/ios5-tech-talk-michael-jurewitz-on-icloud-storage/