我要从数据库加载一些重要内容并显示在屏幕上。但同时有一个“plist to Database”保存的后台任务正在进行中。因此 UI 卡住了。
我使用的代码如下,
用于数据库获取和 UI 更新方法
- (void)performBlockInBackground:(dispatch_block_t)taskBlock
completion:(dispatch_block_t)completionBlock
withPriotity:(dispatch_queue_priority_t)piority
{
__block dispatch_block_t taskBlockRef = taskBlock;
__block dispatch_block_t completionBlockRef = completionBlock;
dispatch_async(dispatch_get_global_queue(piority, 0), ^{
dispatch_sync(dispatch_get_global_queue(piority, 0), taskBlockRef);
dispatch_async(dispatch_get_main_queue(), completionBlockRef);
});
}
我将“Plist to DB”方法称为
[self performSelectorInBackground:@selector(syncData) withObject:nil];
这里taskBlock
是繁重的数据库获取,completionBlock
是 UI 更新。
如果我在一段时间后(方法完成后)调用此方法,syncData
那么它会顺利更新。但如果它还没有完成,那么 UI 就会卡住。
似乎是线程死锁的问题,但对此尚不清楚
请帮忙 !!