iOS - 确保在主线程上执行

时间:2012-07-20 15:20:33

标签: ios xcode multithreading multitasking shared-resource

我想知道如何在主线程上调用我的function

如何确保在主线程上调用function

(这是我之前的question。)

4 个答案:

答案 0 :(得分:160)

这样做:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ {

   //Your code goes in here
   NSLog(@"Main Thread Code");

}];

希望这有帮助!

答案 1 :(得分:132)

当您使用iOS> = 4

dispatch_async(dispatch_get_main_queue(), ^{
  //Your main thread code goes in here
  NSLog(@"Im on the main thread");       
});

答案 2 :(得分:46)

  

我可以遵循任何规则来确保我的应用程序只在主线程中执行我自己的代码吗?

通常你不需要做任何事情来确保这一点 - 你的事情清单通常就足够了。除非你正在与某些API交互产生一个线程并在后台运行你的代码,否则你将在主线程上运行。

如果你想确定,你可以做一些事情,比如

[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];

在主线程上执行方法。 (也有GCD等价物。)

答案 3 :(得分:10)

我认为这很酷,即使是一般的好形式,让一个方法的调用者负责确保调用正确的线程。

if (![[NSThread currentThread] isMainThread]) {
    [self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
    return;
}