我知道我可以使用带有递增变量的for循环迭代,然后在成功时递增,但由于块更快,我希望理想地使用它们。 for循环中的方法在后台处理并创建线程和套接字,这会减慢它的速度,所以我想在移动到下一个之前等待它完成。这是下面的代码。
for (NSString *uuid in file_assets) {
if (![asset_model isFileUploaded:uuid]) {
[self uploadFileAssetWithUUID:uuid :^(BOOL success){
if (success) {
NSLog(@"Upload finished..");
}
}];
}
}
如何在块内部进行通信以移动下一次迭代?
答案 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
});
});