在iOS上,我想知道是否有类似于NSZombies标志的东西可以设置为在需要主线程的情况下从后台线程调用API时进行检测/引发。
使用块,似乎很容易陷入一种情况,即一个人要么做出错误的假设,要么错误地知道哪个线程在做什么。可以检测何时从错误的线程发出调用的调试标志对于发现这些情况非常有用。
我最关心的是苹果的框架(Cocoa Touch)。
提交了错误报告,#12180446。
发布于 2012-08-24 02:45:32
在您的任何需要位于主线程上的API中使用以下代码:
NSAssert([NSThread isMainThread], @"This must only be called on the main thread.");苹果并没有提供这样一个覆盖整个UIKit的东西。您需要在需要时调用它。
发布于 2012-08-24 02:55:51
我做一些更实际的事情。当我调用块时。我用一个自定义的方法来做。
+ (void) ensureDispatchOfBlock:(dispatch_block_t) block onQueue:(dispatch_queue_t) queue async:(BOOL) async{
if (queue == nil || dispatch_get_current_queue() == queue){
block();
}
else {
if (async){
dispatch_async(queue, block);
}
else {
dispatch_sync(queue, block);
}
}
}
+ (void) ensureDispatchOnMainThread:(dispatch_block_t) block async:(BOOL) async{
[self ensureDispatchOfBlock:block onQueue:dispatch_get_main_queue() async:async];
}这使我能够“确保”正在提供的块的分派将在其预期的块上发生。
只需记住要非常谨慎地使用async:NO。
https://stackoverflow.com/questions/12098004
复制相似问题