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

Ios 等待具有完成块的方法在快速枚举块内完成,ios,objective-c,objective-c-blocks,Ios,Objective C,Objective C Blocks,我知道我可以使用带有递增变量的for循环迭代,然后在成功时递增,但由于块更快,我希望在理想情况下使用它们。for循环中的方法在后台处理,并创建线程和套接字,这会减慢它的速度,因此我希望在移动到下一个之前等待它完成。下面是代码 for (NSString *uuid in file_assets) { if (![asset_model isFileUploaded:uuid]) { [self uploadFileAssetWithUUID:uui

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

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

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

            }];
        }
    }

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

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

为此目的使用调度队列。我认为它能满足你的需要

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

});
});

有道理!我甚至没有想过使用队列,但它可能更适合这种计算。谢谢。这个答案已经不再是你的问题@LibanAbdulle的解决方案了吗?嗨,不,我只是想删除我的帐户和历史记录。为什么?你的许多问题都有答案,有些问题有很多观点,因此对社区有益。我的意思是删除,如果你想,但请考虑你在社区的立场。谢谢