74

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

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

(这遵循我以前的问题)。

4

4 回答 4

167

这将做到:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ {

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

}];

希望这可以帮助!

于 2012-07-20T15:38:27.173 回答
137

当您使用 iOS >= 4

dispatch_async(dispatch_get_main_queue(), ^{
  //Your main thread code goes in here
  NSLog(@"Im on the main thread");       
});
于 2012-07-20T15:41:20.990 回答
48

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

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

如果你想真正确定,你可以做类似的事情

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

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

于 2012-07-20T15:36:51.267 回答
11

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

if (![[NSThread currentThread] isMainThread]) {
    [self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
    return;
}
于 2013-03-07T00:44:34.370 回答