等待带有完成块的方法在快速枚举块内完成

时间:2014-04-28 12:55:44

标签: ios objective-c objective-c-blocks

我知道我可以使用带有递增变量的for循环迭代,然后在成功时递增,但由于块更快,我希望理想地使用它们。 for循环中的方法在后台处理并创建线程和套接字,这会减慢它的速度,所以我想在移动到下一个之前等待它完成。这是下面的代码。

    for (NSString *uuid in file_assets) {
        if (![asset_model isFileUploaded:uuid]) {
            [self uploadFileAssetWithUUID:uuid :^(BOOL success){

                if (success) {
                    NSLog(@"Upload finished..");
                }

            }];
        }
    }

如何在块内部进行通信以移动下一次迭代?

2 个答案:

答案 0 :(得分:1)

不要等,也不要等。队列。使用NSOperationQueue创建所有上传并控制并发运行的数量。如果您尝试使循环等待,那么您认为获得的任何速度优势都会失效,并且您可能会阻止主线程。

答案 1 :(得分:0)

为此目的使用调度队列。我认为它可以满足您的需求

dispatch_queue_t exampleQueue = dispatch_queue_create( "NewQueue", NULL );
dispatch_async(exampleQueue, ^{
// do your upload....

dispatch_queue_t queue=dispatch_get_main_queue();
dispatch_async(queue, ^{

do your update after upload

});
});