答案 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;
}