問題タブ [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 投票する
1 に答える
673 参照

iphone - dispatch_async ブロックが呼び出されない

MySynchManagerクラスには共有インスタンスがあります。

MySynchManagerクラスの関数の1つは

uploadSession:@"session"ビューコントローラーから呼び出されています。

私が直面している問題は、存在するコードdispatchSessionが呼び出されることがありますが、ブロックが呼び出されないことがあります。ブロックが印刷された後、ログ印刷ステートメントのみを確認します。

この背後にある理由を説明できる人はいますか?

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

iphone - 構築されたフレームワークからのdispatch_asyncの使用

私は奇妙な問題に直面していますdispatch_async

私は 2 つの別個のプロジェクトを持っています。1 つはフレームワークを構築するためのもので、もう 1 つは何らかの目的でそのフレームワークを使用するためのものです。

私は非常に単純なコードを実行しようとしています (追加のコードもありません):

したがって、これdispatch_asyncをプロジェクトに配置すると完璧に機能します
が、フレームワークプロジェクトのメソッドに配置してビルドし
、そのフレームワークを使用しているプロジェクトからそのメソッドを呼び出すと、スタックの最初の行でエラーが発生し
ますEXC_BAD_ACCESSdispatch_asyncobjc_retainAutoreleasedReturnValue

これはキューdispatch_asyncでのみ機能しますがdispatch_get_main_queue()

優先度の異なるさまざまなキューを作成しようとしましたが、静的キューを試してみ
ましたが、実際には作成されますが、dispatch_async毎回クラッシュします

これは私のフレームワーク プロジェクトのビルド設定のいくつかのフラグに関連する問題だと思いますが
、残念ながら何が役立つかを見つけることができません。

更新:
これはシミュレーターでは完全に機能しますが、デバイスでは機能しないことを忘れていました

そして、これが私のコードの例です:

SingleTonOfFramework - 私のフレームワークからのクラスで
あり、これはそれが何をするかです:

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

ios - UIAlertView を閉じられない、ボタンがクリックできない

MBProgress ビューを表示し、別のスレッドでコードを実行する次のコードがあります。次に、メイン スレッドへのハンドルを取得し、機能するスピナーを閉じてから、UIAlertView を表示します。UIAlertView は正常に読み込まれますが、どのボタンもクリックできません。アラート ビューがディスパッチ ブロックの外側にある場合、問題なく動作します。何か案は?

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

ios - gcd/dispatch_asyncとCoreDataがアプリをフリーズします

何らかの理由でdispatch_asyncとCoreDataを一緒に使用すると、アプリが完全にフリーズしますが、クラッシュしません。

症状

ユーザーインターフェイスが応答しません。アプリはクラッシュしません。

アプリは[[UIAccelermeter sharedAccelerometer] setDelegate: self]、加速度計の値を継続的に取得するために使用します。" accelerometer:didAccelerate:"コールバックはメインスレッドで実行されます。この問題が発生すると、コールバックは実行されなくなります。

したがって、メインスレッドは「フリーズ」しているように見えます。

コンテクスト

NSURLConnectionアプリでHTTPリクエストをサーバーに送信するために使用しています。応答データが処理されるconnectionDidFinishLoadingでは、実行に約2秒かかり、メインスレッドで実行されるため、この2秒間はユーザーインターフェイスが応答しなくなります。

いくつかの調査の結果、gcd/dispatch_asyncこの状況でデータ処理をバックグラウンドで実行するのが最善の解決策のようです。そこで、でconnectionDidFinishLoading、次のgcd呼び出しを追加しました。

これは正常に機能する場合もありますが、アプリがランダムにフリーズする可能性があります-同じコードが使用されていても、Core Dataストレージに同じデータがあり、テストを繰り返すと、X%の確率で症状が観察されることがわかります。問題が発生する可能性は、以下でさらに説明するいくつかの要因の影響を受けます。

handleTheData()は何をしますか?

NSURLConnectionJSON形式の文字列であるからの応答データを調べます。文字列はエンティティの3つのリストであり、各エンティティは数値の配列の配列です。したがって、JSON形式の文字列をカスタムオブジェクトの3 NSMutableArrayに変換するコードがあります。ここで、各オブジェクトはサブクラス化されたNSManagedObjectです。

変換中、これらのオブジェクトは永続的に保存される場合とされない場合があるという点で「一時的」であるため、次のように「nil」NSManagedObjectContextで作成されます。

このように、それらはメインコンテキストと混合されません。

次に、これらの新しいオブジェクトがデータストア内の既存のエンティティと比較されます。そのため、特定の新しいエンティティがすでに存在するかどうかを確認するためにデータストアから繰り返しフェッチするコードがいくつかあり、新しいエンティティのデータに応じて、新しいエンティティをデータストアに保存したり、既存のエンティティを更新したりできます。

[managedObjectContext save:&error]は、変更が永続的に保存されるようにするために頻繁に呼び出されます。

他にバックグラウンドで実行されているものはありますか?

症状のセクションで説明したように、Accelerometerは、[[UIAccelermeter sharedAccelerometer] setDelegate:self]を使用してメインスレッドのバックグラウンドで実行されます。

AudioUnitsは、サウンドを生成するためにバックグラウンドで(Appleドキュメントによると別の「優先」スレッドで)実行されるようにも設定されています。

問題の原因に関する調査結果

問題が発生する可能性は、次の要因の影響を受けることがわかりました。

  • NSLog(@ "fetchedResult:%@"、fetchedResult)などのデバッグコードがコメント化されている場合、問題が発生する可能性は低くなります(ただし、引き続き発生します)。
  • 加速度計を使用しない場合、問題が発生することはほとんどありません(ただし、限られた数のテストを行ったため、100%確実ではありません)。
  • 加速度計を使用する場合、問題が発生する可能性は約50/50です。
  • [sampleEntity setXYZ ..]などのコアデータコードの一部がコメント化されている場合、加速度計を使用しても問題が発生することはほとんどありません。

第二号

また、メインスレッドがフリーズしていなくても、別の問題が発生します。データ処理コードは、エラーをスローせずに途中で終了します。

  • つまり、データ処理は部分的にのみ実行され、エラーはスローされず、メインスレッドは引き続き正常に実行されます。
  • この2番目の問題は、主な問題が発生しない場合は常に頻繁に発生します(常にではありません)。

面白い問題ですね。:)

編集

  • 2013年3月1日-以前は問題の原因はiOS6だと思っていました。申し訳ありませんが、それは完全に間違っていました。新しい発見を反映するために説明を変更しました。
0 投票する
1 に答える
1175 参照

iphone - bool _WebTryThreadLock(bool)、0xae8d250 エラー

bool _WebTryThreadLock(bool), 0xae8d250: メイン スレッドまたは Web スレッド以外のスレッドから Web ロックを取得しようとしました。これは、セカンダリ スレッドから UIKit を呼び出した結果である可能性があります。現在クラッシュ中...

マイコード

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

objective-c - dispatch_async と dispatch_sync の実行順序

次のコマンドでシリアル ディスパッチ キューを作成しました。

このシリアル キューを使用して、呼び出し元のスレッドに戻る必要のない作業を非同期で自動的に実行しながら、クラス アクセスのスレッド セーフを確保したいと考えています。

addObjectToQueue: メソッドを呼び出した場合、すぐに isObjectInQueue: メソッドを呼び出します。それらは同じ順序で実行されることが保証されていますか、それとも isObjectInQueue が最初に実行されますか?

つまり、dispatch_async は、呼び出し元のスレッドをブロックしないことを除いて、dispatch_sync (ブロックをすぐにスケジュールする) とまったく同じように動作しますか?

同様の質問で回答が双方向になるのを見たので、できればAppleのドキュメントに裏付けられた決定的な回答を探しています。

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

ios - メイン キューからバックグラウンドに操作を移行する方法 メイン キューを解放する

これが私がやっていることです。

私の問題は、到達可能性テストがメイン キューで実行されていることです。これにより、UI がフリーズすることがよくあります。バックグラウンドモードで実行したい。

バックグラウンド モードまたは優先度の低いモードで ReachabilityTest を処理したいと考えています。しかし、繰り返しになりますが、到達可能性コントローラーは現在のネット可用性をユーザーに通知するため、ある時点でメイン キューを再度使用する必要があります。

もっと良い方法があるはずだと強く信じています。

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

iphone - スレッドで GUI アクションを実行する方法 - IOS

インターフェイス関数の多くを呼び出すスレッドがあります.それが呼び出されると、GUIアクションを実行する必要があります.GUIをメインスレッドで実行する必要があることを認識しているため、今でも使用していました

ほとんどの場合は問題なく動作しますが、まだここで問題に直面しています..たとえば..私のインターフェース関数は以下のようなものです...

現在、名前ポインターはほとんどの場合、ディスパッチ呼び出し内で nil を取得しています (ここでデータを失っていると思います)。 performselectoronMainthread メソッドで試しました..

どんなアイデアでもありがとう..

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

objective-c - 画像を非同期に取得し、setNeedsDisplay を設定する

このコードは、カスタム セルの要素を設定するセル初期化ルーチンにあります。Web から画像を非同期的に取得します。しかし、完了したら再描画する必要があります。

これは私のコードスニペットです:

ただし、UIImageView は再描画されません。セル全体も再描画しようとしましたが、それもうまくいきません。あなたの助けに感謝します。私はしばらくの間、これを修正しようとしてきました!