我想知道如何在主线程上调用我的function
。
如何确保在主线程上调用我的function
?
(这是我之前的一个问题)
这样做:
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
//Your code goes in here
NSLog(@"Main Thread Code");
}];
使用iOS时>=4
dispatch_async(dispatch_get_main_queue(), ^{
//Your main thread code goes in here
NSLog(@"Im on the main thread");
});
我可以遵循什么规则来确保我的应用程序只在主线程中执行我自己的代码?
通常情况下,你不需要做任何事情来确保这一点——你的事情清单通常就足够了。除非你正在与某些API交互,而这些API恰好生成了一个线程并在后台运行你的代码,否则你将在主线程上运行。
如果你想真正确定,你可以做之类的事情
[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];
以在主线程上执行方法。(还有一个GCD等价物。)
我认为这很酷,尽管通常情况下,让方法的调用方负责确保在正确的线程上调用它是一种很好的形式。
if (![[NSThread currentThread] isMainThread]) {
[self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
return;
}