問題タブ [nsoperationqueue]

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 に答える
2254 参照

iphone - NSOperationsのキューとアプリケーション出口の処理

一連のを作成し、NSOperationそれらをキューで実行しようとしています。

それらはすべてシーケンシャルで、一度に1つずつ実行されます。

これらの操作は、Webからデータをフェッチし、コアデータ管理対象オブジェクトを作成して保存します。

アプリケーションが終了する状況をどのように処理しますか?操作はデタッチされたスレッドで実行されるので、現在の操作が「安全に」終了するまでメインスレッドを待機させるにはどうすればよいですか?スレッド(操作)が完了する前に終了して満足している状況があります。これは、アプリをさらに起動すると、ジョブが続行され、中断したところから再開されるためです。

どうもありがとう、

マイク

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

iphone - オペレーション キューは、Core Animation がアニメーション化するときに役立ちますか?

コア アニメーションはバックグラウンド スレッドを使用します。メイン スレッドで負荷の高い計算を実行すると、優先度の低いスレッドが原因で CA のアニメーションが停止します。このような状況でオペレーション キューはどのように役立つのでしょうか?

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

iphone - バックグラウンドでのコアデータの取得

テーブルビューを備えたナビゲーションビューがあります。行がクリックされると、行のindexPathが次のビューに渡されます。

詳細ビューviewDidLoadで、CoreDataからデータをフェッチしています。アプリケーションデリゲートからのフェッチを使用します

[appDelegate loadItem:i];

ご覧のとおり、行番号を含む1つの整数のみを渡しています。

問題は次のとおりです。別のスレッドでこの呼び出しプロセスを実行するにはどうすればよいですか。(バックグラウンドで)フェッチの結果が大きすぎる場合があるため、これが必要です。そのため、処理に3秒かかり、詳細ビューのプッシュが遅れます。

アクティビティインジケーターを3秒間表示する必要があるため、フェッチの処理中にインジケーターのUIを使用できるようにするには、フェッチを別のスレッドに配置する必要があります。

私は初心者なので、最も簡単な方法が必要です。いくつかのコードを投稿するのは素晴らしいことです。またはリンク:)

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

iphone - MKMapViewがアニメーション化または移動しているときに、注釈の追加を一時停止するにはどうすればよいですか。[iPhone SDK 3]

MKMapViewがあり、別のクラスにMKMapViewに注釈を追加するスレッドがあります。

ただし、問題は、MKMapView.annotationsが非アトミックであるということです。したがって、他のクラスが注釈を追加している間、ユーザーがマップの表示領域を移動しなくても問題ないように見えます。しかし、それを動かし続け、その時点で他のクラスがマップに注釈を追加していた場合、アプリはクラッシュします。マップのアニメーション中に配列が変更されたためです。

NSOperationQueueを作成し、追加する各アノテーションジョブをキューに追加しました。

そして、マップのリージョンが変更されるたびに、NSOperationQueueを一時停止し、リージョンの変更が完了したら再起動します。

私はほとんどのクラッシュを取り除くことができました..それでもそれは時々起こります。

何か案が?

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

iphone - ナビゲーションバーでビューを切り替えているときに、EXC_BAD_ACCESS エラーなしで安全に NSOperationQueue スレッドを終了する方法

UITableView を使用していくつかの文字列メッセージを表示しています。また、NSOperationQueue を使用して、バックグラウンド スレッドでメッセージを取得するカスタマイズされた NSOperation を保持しています。1 つのメッセージが正常に取得されると、カスタマイズされた NSOperation が UITableView コントローラーに通知して表示します。

すべてのメッセージが読み込まれた後、ナビゲーション バーの戻るボタンをクリックして UITableView から他のビューに切り替えると、すべて問題ありません。しかし、メッセージがまだロードされている間に戻るボタンをクリックすると、EXC_BAD_ACCESS がスローされます。カスタマイズされた NSOperation がperformSelectorOnMainThreadメソッドで UITableView コントローラーに通知しているときに例外が発生したことを確認しました。ビューを切り替えた後、ターゲットの UITableView コントローラーは無効ではないように聞こえますが、Navigation Controller は View Controller インスタンスを保持すると思います。この問題を解決する方法を教えてください。ありがとう。

カスタマイズされた操作は、次のコードを使用して UITableView コントローラーで初期化されます。

カスタマイズされた NSOperation クラスは、次のコードで UITableView を更新します。

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

iphone - OpenFlow :: 画像をストリーミングする方法

iPhone アプリでOpenFlow ( http://apparentlogic.com/openflow/ ) を使用して、サーバーからファイルをストリーミングしようとしています。これどうやってするの?NSOperationQueue を使用する必要がありますか?

* ローカル ファイルを使用する * Flickr のデモを使用する (Flickr API とライブラリを使用)

ローカル画像をロードするコード:

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

ios - NSOperation は UI ペイントをブロックしますか?

NSOperationの使用と描画に関するアドバイスを求めています。

メインスレッドにサブクラスを作成させ、NSOperationサブクラスに追加しますNSOperationQueue

NSOperationはいくつかの重い処理を行います.main()メソッドで数分間ループし、常にいくつかの作業を処理することを目的としていますが、今のところ、内部にsleep(1)を含むwhile()ループがあり、移動するように設定されています.約5回(テスト用)。

これを生成するメイン (元の) スレッドNSOperationは、ビューへの描画と UI の更新を担当します。

NSOperation スレッドに通知を使用して、メイン スレッドにある程度の処理が完了したことを伝えるつもりでしたが、現時点では、この通知は while() ループを通過するたびに 1 回 (つまり、1 秒に 1 回) 送信されます。 sleep(1) を実行しているだけです)。メイン スレッド (ビュー) は、これらの通知を受け取るように登録します。

通知はすぐにメイン スレッドに到達し、非同期のように見えますが、問題ないように見えます。両方のスレッドが期待どおりに実行されているようです...つまり、同時に実行されます。(各スレッドがいつ通知を送受信するかを大まかに確認するために NSLog() を使用します)。

ビューが通知を受け取り、そのハンドラー メソッドが呼び出されると、単純に整数変数をインクリメントし、これを (もちろん文字列として) ビューに描画しようとします。テストでは、drawRect: のコードは、この整数を (文字列として) 画面にうまく描画します。

ただし、ここに私の問題があります (申し訳ありませんが、ここに到達するまでに少し時間がかかりました): メインスレッド (ビュー) が NSOperation から通知を受け取ると、このテスト整数を更新し、[self setNeedsDisplay] を呼び出します。ただし、ビューは NSOperation が終了するまで再描画されません! 別のスレッドである NSOperation には、メイン スレッドのイベント ループをブロックする機能がないことを期待していましたが、これが起こっているようです。NSOperation が終了し、その main() が戻ると、ビューは最終的にすぐに再描画されます。

おそらく私はNSOperation正しく使用していません。「非並行」モードで使用していますが、名前にもかかわらず、これでも新しいスレッドが生成され、非同期処理が可能になると理解しています。

コードを見たい場合は、私に知らせてください。

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

cocoa - ASIHTTPRequest が同期モードで NSOperation 変数を飲み込む

ねえ、私はしばらくこの問題と戦ってきました。おそらく、マルチスレッドに関する知識に欠けているものがありますが、ここで何が起こりますか。nsoperation キューを作成すると、割り当てられた変数は "[request startSynchronous];" の後にクリアされます。コード行。これが私が話していることです:

オブジェクトはまだここに存在します

[リクエスト startSynchronous];

するとここで物体が消えます!

これは原則的な理解のギャップと関係があると確信していますが、何日もコードを再配置して成功していません。

...

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

iphone - 複数の NSURLConnection はパフォーマンスの遅延を引き起こしますか?

マルチファイルダウンローダーを作りました。NSOperationQueue を使用して NSURLConnection を実装しました。

NSOpetationQueue には、多くの NSURLConnection 操作があります。

そして、MaxConcurrentOperationCount を 10 に設定します。

私のコードは正しいと思っていましたが、プロジェクトを実行した後、間違っていました。いくつかの接続エラーが発生しました。ファイルのURLは正しかった。ファイルのダウンロードが完了しました。ファイルをダウンロードすると、「タイムアウト」エラーが発生します。

とても深刻です。私は 8 つのファイルでテストしましたが、それらの合計サイズはわずか 3M です。でも総ダウンロード時間は2分~!!!

1 回のファイルのダウンロードにかかる時間はわずか数秒です。(2~3 秒) しかし、複数のファイルのダウンロードが発生し、多くの負担がかかります!! (2分)

なぜだかわかりません... 理由を知っている人はいますか?

0 投票する
3 に答える
1452 参照

objective-c - MaxConcurrentOperationCount> 1の場合、EXC_BAD_ACCESSを取得します

こんにちは私はNSOperationQueueを使用してバックグラウンドで画像をダウンロードしています。画像をダウンロードするためのカスタムNSOperationを作成しました。画像をテーブルセルに入れます。問題は、[operationQueue setMaxConcurrentOperationCount:10]を実行し、いくつかのセルを下にスクロールすると、プログラムがEXC_BAD_ACCESSでクラッシュすることです。テーブルの同じ場所でクラッシュするたびに。同じ会社のもので同じロゴのセルが3つ並んでいるので、基本的には3回画像をダウンロードする必要があります。それ以外の場合は正常に動作します。

これは私が画像のダウンロードを処理する方法です。上記の関数でコメントアウトし [delegate didFinishDownloadingImage: self]; てもクラッシュしませんが、もちろん役に立ちません。