如何在xcode中创建异步while循环

时间:2015-03-16 07:36:05

标签: objective-c

如何在异步块中添加这段代码,并在后台继续运行?

for(int i=0;i<10; i++){
        carRPM = [NSString stringWithFormat:@"%d",i];
        NSLog(@"Car RPM: %@",carRPM);
    }

2 个答案:

答案 0 :(得分:1)

您可能希望使用以下语法调度异步线程以在闭包内执行代码:

dispatch_queue_t myQueue = dispatch_queue_create("My Queue",NULL);
dispatch_async(myQueue ,^{
    for(int i=0;i<10; i++){
    carRPM = [NSString stringWithFormat:@"%d",i];
    NSLog(@"Car RPM: %@",carRPM);
    }

   dispatch_async(dispatch_get_main_queue(), ^{
    // Update the UI

   });
});

编辑:更新了我的代码,以便在单独的线程上运行更准确,并在线程中添加一个块,以便在通过主线程更新UI时更新UI。

答案 1 :(得分:0)

您可以使用GCD并使用dispatch_async()创建一个单独的线程来运行循环。

// Create the new thread that you want to run the loop on.
dispatch_queue_t myLoopQueue = dispatch_queue_create("My Loop Queue", NULL);
dispatch_async(myLoopQueue, ^{
    for(int i=0;i<10; i++) {
        carRPM = [NSString stringWithFormat:@"%d",i];
        NSLog(@"Car RPM: %@",carRPM);
    }
});

我假设您希望迟早使用carRPM中存储的值。因此,一旦线程完成,知道carRPM的最终值将丢失是明智的。为了能够使用已在块中设置的carRPM的最终值,您需要使用关键字carRPM标记__block,请查看此关键字的说明{ {3}}

如果您只使用dispatch_get_main_queue(),则会在主线程上运行循环,在单独的线程上运行 NOT