【发布时间】:2012-07-19 21:35:45
【问题描述】:
【问题讨论】:
-
我认为只有使用
[NSObject performSelectorOnMainThread]调用您的委托方法的类才能被视为安全。否则,如果对象只是调用[NSObject performSelector],您的委托方法将在调用者线程的上下文中运行。
标签: ios xcode multithreading multitasking shared-resource
【问题讨论】:
[NSObject performSelectorOnMainThread] 调用您的委托方法的类才能被视为安全。否则,如果对象只是调用[NSObject performSelector],您的委托方法将在调用者线程的上下文中运行。
标签: ios xcode multithreading multitasking shared-resource
这样就可以了:
[[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 进行交互,否则您将在主线程上运行。
如果你想确定,你可以这样做
[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];
在主线程上执行一个方法。 (也有一个 GCD 等价物。)
【讨论】:
我认为这很酷,即使一般来说它的好形式是让方法的调用者负责确保在正确的线程上调用它。
if (![[NSThread currentThread] isMainThread]) {
[self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
return;
}
【讨论】: