如何在异步块中添加这段代码,并在后台继续运行?
for(int i=0;i<10; i++){
carRPM = [NSString stringWithFormat:@"%d",i];
NSLog(@"Car RPM: %@",carRPM);
}
答案 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 。