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

objective-c - 複数のNSOperationQueues?

NSOperationsスレッドの問題を解決するためにアプリケーションで使用したいと思います。いくつかのチュートリアルを読み、何をしなければならないかがわかりましたが、問題があります。NSOperationQueue各クラスで同じものを持っている必要があります。NSOperationQueue各クラスで新しいものを使用するとどうなりますか。並行性の問題がありますか?

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

objective-c - NSoperationとKeyValueの監視

MyOperationオブジェクト(NSOperationから継承)を作成し、NSOperationQueueに追加しています。次に、MyOperationでKVOを実行しています。私はこの方法を使用しています

終了した場合にMyOperationから値を取得します。このメソッドでは、他のクラスの便利なメソッドを使用して、他のデータを取得しています。

たぶんここでobserveValue...メソッドの同期の問題がありますか?

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

cocoa - NSOperationはTableViewにデータをロードできません

NSOperationに問題があります。多くの方法を試しましたが、画面の背後で実行されますが、テーブルビューには表示されません。誰かがこれで私を助けることができますか?NSOperationは初めてです。

最近.h

最近.m

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

iphone - iPhone での非同期 NSURLConnection didLoadResource 後の Core Data ブロック UI

誰かが UITableView 内の行に触れるたびに、一連の非同期 NSURLConnections を開始して、データをダウンロードし、そのデータを解析して Core Data に保存します。

問題は、これを行うと、データのダウンロード中に UI が応答しますが、解析と保存が開始されるとすぐに UI が応答しなくなることです。

NSURLConnection は、NSURLConnection プロトコルを実装するクラス内にラップされ、NSURLConnection が didLoadResource を起動すると、解析と保存を処理する DataAdapter クラスが開始されます。それがUIブロックの原因だと思います。

誰もこれを以前に扱ったことがありますか?私のオプションは何ですか?DataAdapter を NSOperation に入れますか?

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

concurrency - iPhone:NSOperationQueueが連続して操作を実行している

すべてのネットワーク要求を処理するシングルトンNSOperationQueueがあります。ただし、特に長い操作を1つ実行している場合(この特定の操作には少なくとも25秒かかります)、他の操作は完了するまで実行されないことに気付きました。

maxConcurrentOperationCountはNSOperationQueueDefaultMaxConcurrentOperationCountに設定されているため、これが問題になるとは思われません。

これが起こる理由は何ですか?複数のNSOperationQueuesを生成する以外に(うまくいくかどうかも、それが良い考えかどうかもわかりません)、この問題を解決するための最良の方法は何ですか?

ありがとう。

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

iphone - NSInvocationOperation とメインスレッド

サブビューとしてUIKitオブジェクトを持つビューがあると想像してください(たとえば、UIActivityIndicatorViewこれは問題ではありません)。このビューには、doSomethingUIKit オブジェクトを何らかの方法で管理する と呼ばれるセレクターもあります (この例では、インジケーター ビューを開始または停止できます)。

NSInvocationOperationで(ビューのコード部分から)作成しinitWithTarget:self selector:@selector(doSomething) object:nilます。次に、に追加しNSOperationQueueます。そして、すべて正常に動作します。

どのように?!これは新しいスレッドであり、スレッドセーフではない UIKit オブジェクトでなければなりません! エラーが見つからない (そしてクラッシュが発生しなかった) のはなぜですか?

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

iphone - NSThread対NSOperationQueue対??? iPhoneで

現在NSThread、別のスレッドで画像をキャッシュするために使用しています。

代わりに:

または、NSOperationQueue

から切り替える理由はありますNSThreadか?GCDはiPhone向けにリリースされたときの4番目のオプションですが、パフォーマンスが大幅に向上しない限り、ほとんどのプラットフォームで機能する方法を使い続けたいと思います。


@ Jon-Ericのアドバイスに基づいて、NSOperationQueue/NSOperationサブクラスソリューションを使用しました。それは非常にうまく機能します。このNSOperationクラスは十分に柔軟性があるため、必要に応じて、呼び出し、ブロック、またはカスタムサブクラスで使用できます。どのように作成してNSOperationも、実行する準備ができたら、操作キューに入れることができます。操作は、キューに入れるオブジェクトとして機能するように設計されているか、必要に応じてスタンドアロンの非同期メソッドとして実行できます。カスタム操作メソッドを同期して簡単に実行できるため、テストは非常に簡単です。

この質問をして以来、私はいくつかのプロジェクトでこれと同じ手法を使用してきましたが、コードとテストをクリーンで整理され、楽しく非同期に保つ方法に満足することはできませんでした。

A++++++++++再びサブクラス化されます

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

iphone - NSOperation で追加の保持が必要

iPadアプリを開発しています。NSOperation を使用して、NSOperationQueue によって処理されたバックグラウンドで何かをダウンロードします。NSOperation に保持を追加しない限り、操作のアクションが実行された後にクラッシュすることがわかりました。NSOperationQueue の addOperation は、NSOperation を保持すると言い、NSOperation 自体はターゲット オブジェクトを保持します。したがって、追加の保持が必要な理由がわかりません。

非同期操作をキャンセルしてその場所に新しい操作を作成するパターンを実装しようとしていることを除いて、これは私の進歩を妨げません。iPhone OS 4.0 ではまだ開発できません (waitUntilFinished を提供します)。そのため、追加の保持を解放しても安全であることを知る別の方法が必要です (または、余分な保持をまったく行わないようにする方法を見つけます)。

助言がありますか?

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

iphone - NSOperationQueueは、完了時に数秒間ハングするようです

UITableViewDataSourcefromプロトコルとプロトコルを実装するカスタムViewControllerがありUITableViewDelegateます。(私のviewDidLoadメソッドで)テーブルのデータをロードするときに、aNSOperationQueueとaを作成し、NSInvocationOperationそれをキューに追加します。アクティビティインジケーターを表示してviewDidLoad終了します。

操作に使用されたメソッドは、アクティビティインジケーターのアニメーションを終了します。

NSLogでは操作のメソッドが返されたように見えますが、操作が完了すると、操作が実際に完了するまでに5〜7秒の休止があることに気付きました。

Instrumentsを使用して一時停止が発生している場所を特定しようとしましたが、CPU時間のほとんどがシステムライブラリに費やされているため、それからはわかりません。

編集 これは省略形です:

明確にするために、キュー内の最後の操作は次のとおりです。

ログに表示されるのは、上記のログメッセージの出力であり、その後5秒間休止し、最後にインジケーターが非表示になっているビューが続きます。

何か案は?

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

iphone - NSOperation内からNSOperationQueueをキャンセルする

NSOperationQueueを初期化してから3つのクラス(、、、)を追加ClassAClassBClassC次々に実行するiPhoneSDK4.0コードがあります。ClassA、、ClassBおよびClassCはすべて。のサブクラスですNSOperation

関連するコードは以下に含まれています。

依存関係の理由は、操作が正常に完了したclassB場合にのみ実行する必要があるためです。classA同様に、正常に完了したclassC場合にのみ実行する必要があります。classB

現時点では、たとえば、正常に完了しなかったclassB場合に実行されないようにする方法を理解するのに苦労しています。classAこの例を続けて、私はどういうわけか[NSOperationQueue cancelAllOperations]内部から呼び起こすことを考えていましたが、内部(サブクラス)からclassA親のハンドルを取得する方法がわかりません。これは私の最初の考えだったので、同じ結果を達成するための他のより良い提案を受け入れるでしょう!NSOperationQueueclassANSOperation

各クラス内には、正しく完了したかどうかを判断するための条件付きコードがあります。現時点では、デバッグ目的でコンソールに対して「成功」または「失敗」のNSLを記録しています。NSLog(@"Fail")完璧な世界では、各クラスのステートメントを、NSOperationQueueの他のすべてのクラスの実行を停止するコードに置き換えられるようにしたいと思います。

どんな提案でも大歓迎です(そして感謝します)。