データベースからロードして画面に表示する重いコンテンツがあります。しかし同時に、「データベースへの plist」保存のバックグラウンド タスクが進行中です。したがって、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
は重い DB フェッチでcompletionBlock
あり、UI の更新です。
しばらくして(メソッドが完了した後)このメソッドを呼び出すと、syncData
スムーズに更新されます。しかし、まだ完了していない場合、UI が動かなくなります。
スレッドのデッドロックの問題のようですが、これについては明確ではありません
助けてください !!