問題タブ [dispatch-async]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
495 参照

ios - 終了していないブロックに UIView を 2 回追加しないようにするにはどうすればよいですか?

画像が読み込まれていることを示すために uiimageview に「読み込み中」ビューを追加してから、ディスパッチ非同期で画像を充電し、終了したら「読み込み中」ビューを削除します。問題は、このメソッドを 2 回呼び出すと「読み込み中」ビューが 2 回追加され、2 番目のビューが削除されることはありません。

編集:

view.h で

オンビュー.m

これが一度だけ呼び出された場合、またはロードが既に削除された後に呼び出した場合、すべて正常に機能します。問題は、ブロックが終了する前にこれを呼び出した場合です。

みんなありがとう、これが私の最終的な解決策です。

0 投票する
1 に答える
339 参照

objective-c - dispatch_async が宣伝どおりに機能しない

私はまだiOSにかなり慣れていますが、以下のコードはうまくいくようです。バックグラウンドで行う作業がたくさんあるので、作業が完了している間、「ビジー インジケーター」がユーザーに表示されるはずです。しかし、ビジー インジケータが数秒間表示されません。ほとんどの作業 (すべてではない) が完了したときにのみ表示されます。

実行速度が非常に遅いログ (上には表示されていません) がたくさんありますが、出力ログ (スレッド ID を含む) を見て、オーバーレイが作成され、バックグラウンド作業が開始されていることを確認できますが、デバイスにオーバーレイが数秒間表示されません。

オーバーレイをすぐに表示するにはどうすればよいですか?

0 投票する
0 に答える
2199 参照

ios - dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) は画像をロードしません

画像を読み込んで表示し、テーブルビュー セルに表示しようとしています。画像は Google からのリンクです。簡単な読み込みに使用しようとしましdispatch_asyncたが、すべての画像が読み込まれません。

私のコードの一部を次に示します。

これは私が得ているものです:

ここに画像の説明を入力

URLを配列に保存します。これは、配列の配列の一部です。

0 投票する
2 に答える
644 参照

ios - @synchronized および dispatch_async

私がやろうとしているのは、@synchronizedディレクティブを使用して、シングルトン オブジェクトが一度に複数のスレッドからアクセスされないようにすることです。また、オブジェクトへの変更を失わないようにできる限り努力することが非常に重要であるため、そのシングルトン オブジェクトが変更されるたびにディスクに書き込むことで、そのオブジェクトを永続的に保存したいと考えています。

多くの人がそうしないでくださいと言うかもしれません。時間がかかりすぎます。それは良い習慣ではありません、など。はい、私はそれを認識しています。これはむしろ「どうなるか」です。質問。

そのため、シングルトン オブジェクトを変更するときはいつでも、変更コードを@synchronizedブロック内に配置してから、オブジェクトをディスクに書き込みます。私が考えていたdispatch_asyncのは、次のように別のスレッドでオブジェクトの書き込みを行うために使用することでした:

@synchronizedそのため、一度にそのコード ブロックを実行できるスレッドは 1 つだけであると理解しています。私の理解dispatch_asyncは少し曖昧ですが、これはブロックをディスパッチキューに送信して非同期に実行し、すぐに戻ると思います。これは、ブロックがまだディスクに書き込まれている@synchronized間に別のスレッドがブロックを通過した場合、別のブロックを送信して実行し、新しく変更されたものをディスクに書き込むだけですが、最初のブロックがディスクに書き込まれるまで開始されないことを意味します。dataStructuredataStructuredataStructure

私はこれについて正しく考えていますか?また、設定はアトミックに変更されますYESか、NOまたはディスパッチキューのシリアル化により、複数のスレッドがこのファイルに同時に書き込まれないことが保証されますか?

ありがとうございました!

0 投票する
1 に答える
272 参照

ios - Objective-C のグランド セントラル ディスパッチ/dispatch_async を使用してバックグラウンド キューを参照する

現在、データを収集している間もユーザーがアプリケーションをナビゲートできるように、一定期間バックグラウンドでプロセスを実行しようとしています。これにはGCDを利用する必要があることがわかりました。arrayBuildただし、バックグラウンド キューでも実行する方法がわかりません。

これをバックグラウンド キューに追加するにはどうすればよいですか? dispatch_async への参照が削除されると、アプリケーションは正常に動作するため、スレッドに問題があることがわかります。

0 投票する
2 に答える
72 参照

ios - SAME スレッドの非同期呼び出しでハードウェアで何が起こるか?

関連するが同じではないことに注意してください: iPhone - Grand Central Dispatch メインスレッド

私は何度もこの質問に失敗したので、ここにソースコードがあります:

メインスレッドで

スレッドが切り替わると、レジスタがスレッド ローカル ストレージに格納され、コンテキストが切り替わり、プログラム カウンターの新しい場所から実行されます (これは、単に別のスタックを使用するプログラムのコピー内にあり、登録)、メインスレッドに「戻ります」。

それが自分自身を中断するとき、私はそれがいつすべきかを決定するものと、スレッドローカルのものに何が起こるのか疑問に思っています。

私はこれについて少し読みましたが、プログラムが連続的ではないという事実にまだ頭を悩ませています。それらは、「OS がプロセスのチャンクまたはそのチャンク (スレッド) を実行することを決定したときに、小さなチャンクで実行するものです。

私は独学なので、学者にとって標準的なレジスター/asm の知識が不足している可能性があります。

ありがとう。コードが役立つはずです。これは iOS 固有ですが、回答/質問はメインからメインへの言語に関連していると思います。

過去のすべての試みは、私がこれを求めている理由を無視する長い回答をもたらしたので、最後にもう一度繰り返します....

これは同じスレッド用です。メインからメインへ。それは本当にそれ自体を停止し、プログラムカウンターを別の場所に移動し、移動してからブロックで終了しますか? また、これらのことは通常ブランチで変更しないでください (if/for およびブロックも)。

私を正しい方向に向けることもできますが、私が言ったように、以前は質問が誤解されていました.

0 投票する
1 に答える
86 参照

ios - データ ソースから行を 1 つ削除してテーブルを再読み込みしても、tableView には 2 つの行が表示されます。

基本的にユーザーがアプリで行うすべての会話の ID を格納する NSMutableArray _conversationsArray があります。その値に基づいて、tableView に異なる数の行を表示します。データ ソースから会話を削除し、tableView のリロードをトリガーすると、numberOfRowsInSectionメソッドがトリガーされ、ブレークポイントを設定して、その配列内の要素 (会話) の数を確認します。

ここに画像の説明を入力

すべて問題ないようです。削除前に 2 つあったので、結果は 1 つのオブジェクトです。問題は、画面の左端にあるように、(ブレークポイントの後でも) 両方の行が tableView にまだ表示されていることです:/ 2 行目は消えているはずですが、消えていません。タッチ イベントに応答しなくなりましたが、削除する必要があります。

このような問題を経験したことがありますか? どんな助けでも大歓迎です。

- - アップデート - -

スレッドで何かをしなければならないのでしょうか?スレッドが変更されたときにテーブルが適切に更新されるように見えるため:/デバッグが難しいため、間違っている可能性があります