Должен ли URLForUbiquityContainerIdentifier: вызываться в потоке вне основного потока? - PullRequest
7 голосов
/ 29 января 2012

Я прочитал много противоречивой информации о том, должен ли URLForUbiquityContainerIdentifier: вызываться вне основного потока или нет.Во многих документах Apple они всегда вызывают этот метод, предположительно, в главном потоке.Тем не менее, я также читал, что вполне возможно, что вызов этого метода может блокировать в течение значительного времени.

Что думают все?Вызовите его в главном потоке и не волнуйтесь или да, ВСЕГДА совершайте этот вызов в другом потоке?

1 Ответ

6 голосов
/ 29 января 2012

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];
    });
});

Это из замечательной статьи, расположенной здесь:

...