在我的应用程序中,我使用以下方法来检查某些变量的值,这些变量只能在主线程上访问。iOS ObjC:为什么mainThread上的dispatch_sync不工作而app在后台接收APNs提取?
- (void) xttSyncOnMainThread:(void (^)(void))prmBlock {
if (![NSThread isMainThread]) {
dispatch_queue_t mtQueue = dispatch_get_main_queue(); // will be executed
// execution is stuck here
dispatch_sync(mtQueue, prmBlock); // won't be executed
} else {
prmBlock();
}
}
我需要移动:
现在,我开始实施的APN,当我的应用程序是通过APN的唤醒似乎代码执行(背景)总是停留在点使用注释显示所有的代码到非MT队列还是我错过了别的?
非常感谢!
您认为这会导致死锁吗?如果我不在后台,而是我的应用程序处于“主动模式”,它可以很好地工作。我甚至检查当前线程是否是避免死锁的主线程。 – McMini
我的意见并不重要你在主队列上运行dispatch_sync。因为在启动块之前主队列已经完成了。但是这不会发生,因为你的队伍正在排队并等待被派遣。你阻止自己。也许我的描述不是最好的,但这基本上是写在相关问题上的。 –
我不确定你需要多少同步电话。但我会尽量简化你的方法,只能通过异步调用在主线程上运行。 dispatch_get_main_queue(),^ {prmBlock()} –