を利用してバックグラウンドに送信するメソッドを呼び出そうとしていますdispatch_async
。
これは単純なものである必要がありますが、何らかの理由で、メソッドが戻るまで UI がブロックされたままになります。
ここに私が持っているものがあります:
dispatch_queue_t privateQueue = dispatch_queue_create("com", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(privateQueue, ^
{
__block UIImageView *imgView = [[UIImageView alloc] initWithFrame:self.view.frame];
dispatch_async(dispatch_get_main_queue(), ^
{
imgView = [controllerB startProcess];
controllerC.imageView = imgView;
});
});
startProcess
UIが再び無料になる前に、返品を待つ必要があります.
それから私はimgView = [controllerB startProcess];
外に移動しようとしましたdispatch_get_main_queue()
:
dispatch_async(privateQueue, ^
{
__block UIImageView *imgView = [[UIImageView alloc] initWithFrame:self.view.frame];
imgView = [controllerB startProcess];
dispatch_async(dispatch_get_main_queue(), ^
{
controllerC.imageView = imgView;
});
});
この場合、UI は更新されimgView
ませんが、UI はロックされません。
グローバル キューを使用しようとしましたが、結果は同じです (UI は待機する必要があります)。
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
ここで非常に明白な何かが欠けていると思います。それか、それとも私にとって長い一日でした。
編集:
の[controllerB startProcess];
私は以下を利用しています:
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
これらの方法が私の問題を引き起こす GCD と関係があるかどうかはわかりません。画像は単なる .png です。
これについて一生懸命考えました。アイデアが不足しています。画像で UI を更新できる唯一の方法は、メソッド呼び出しを 内dispatch_get_main_queue()
に配置することです。これは、画像の準備ができてメソッドが戻るまですべての UI がブロックされるため、GCD を使用する目的に反します。
どんな提案でも大歓迎です。