問題タブ [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.
objective-c - 複数のNSOperationQueues?
NSOperations
スレッドの問題を解決するためにアプリケーションで使用したいと思います。いくつかのチュートリアルを読み、何をしなければならないかがわかりましたが、問題があります。NSOperationQueue
各クラスで同じものを持っている必要があります。NSOperationQueue
各クラスで新しいものを使用するとどうなりますか。並行性の問題がありますか?
objective-c - NSoperationとKeyValueの監視
MyOperationオブジェクト(NSOperationから継承)を作成し、NSOperationQueueに追加しています。次に、MyOperationでKVOを実行しています。私はこの方法を使用しています
終了した場合にMyOperationから値を取得します。このメソッドでは、他のクラスの便利なメソッドを使用して、他のデータを取得しています。
たぶんここでobserveValue...メソッドの同期の問題がありますか?
cocoa - NSOperationはTableViewにデータをロードできません
NSOperationに問題があります。多くの方法を試しましたが、画面の背後で実行されますが、テーブルビューには表示されません。誰かがこれで私を助けることができますか?NSOperationは初めてです。
最近.h
最近.m
iphone - iPhone での非同期 NSURLConnection didLoadResource 後の Core Data ブロック UI
誰かが UITableView 内の行に触れるたびに、一連の非同期 NSURLConnections を開始して、データをダウンロードし、そのデータを解析して Core Data に保存します。
問題は、これを行うと、データのダウンロード中に UI が応答しますが、解析と保存が開始されるとすぐに UI が応答しなくなることです。
NSURLConnection は、NSURLConnection プロトコルを実装するクラス内にラップされ、NSURLConnection が didLoadResource を起動すると、解析と保存を処理する DataAdapter クラスが開始されます。それがUIブロックの原因だと思います。
誰もこれを以前に扱ったことがありますか?私のオプションは何ですか?DataAdapter を NSOperation に入れますか?
concurrency - iPhone:NSOperationQueueが連続して操作を実行している
すべてのネットワーク要求を処理するシングルトンNSOperationQueueがあります。ただし、特に長い操作を1つ実行している場合(この特定の操作には少なくとも25秒かかります)、他の操作は完了するまで実行されないことに気付きました。
maxConcurrentOperationCountはNSOperationQueueDefaultMaxConcurrentOperationCountに設定されているため、これが問題になるとは思われません。
これが起こる理由は何ですか?複数のNSOperationQueuesを生成する以外に(うまくいくかどうかも、それが良い考えかどうかもわかりません)、この問題を解決するための最良の方法は何ですか?
ありがとう。
iphone - NSInvocationOperation とメインスレッド
サブビューとしてUIKitオブジェクトを持つビューがあると想像してください(たとえば、UIActivityIndicatorView
これは問題ではありません)。このビューには、doSomething
UIKit オブジェクトを何らかの方法で管理する と呼ばれるセレクターもあります (この例では、インジケーター ビューを開始または停止できます)。
NSInvocationOperation
で(ビューのコード部分から)作成しinitWithTarget:self selector:@selector(doSomething) object:nil
ます。次に、に追加しNSOperationQueue
ます。そして、すべて正常に動作します。
どのように?!これは新しいスレッドであり、スレッドセーフではない UIKit オブジェクトでなければなりません! エラーが見つからない (そしてクラッシュが発生しなかった) のはなぜですか?
iphone - NSThread対NSOperationQueue対??? iPhoneで
現在NSThread
、別のスレッドで画像をキャッシュするために使用しています。
代わりに:
または、NSOperationQueue
から切り替える理由はありますNSThread
か?GCDはiPhone向けにリリースされたときの4番目のオプションですが、パフォーマンスが大幅に向上しない限り、ほとんどのプラットフォームで機能する方法を使い続けたいと思います。
@ Jon-Ericのアドバイスに基づいて、NSOperationQueue
/NSOperation
サブクラスソリューションを使用しました。それは非常にうまく機能します。このNSOperation
クラスは十分に柔軟性があるため、必要に応じて、呼び出し、ブロック、またはカスタムサブクラスで使用できます。どのように作成してNSOperation
も、実行する準備ができたら、操作キューに入れることができます。操作は、キューに入れるオブジェクトとして機能するように設計されているか、必要に応じてスタンドアロンの非同期メソッドとして実行できます。カスタム操作メソッドを同期して簡単に実行できるため、テストは非常に簡単です。
この質問をして以来、私はいくつかのプロジェクトでこれと同じ手法を使用してきましたが、コードとテストをクリーンで整理され、楽しく非同期に保つ方法に満足することはできませんでした。
A++++++++++再びサブクラス化されます
iphone - NSOperation で追加の保持が必要
iPadアプリを開発しています。NSOperation を使用して、NSOperationQueue によって処理されたバックグラウンドで何かをダウンロードします。NSOperation に保持を追加しない限り、操作のアクションが実行された後にクラッシュすることがわかりました。NSOperationQueue の addOperation は、NSOperation を保持すると言い、NSOperation 自体はターゲット オブジェクトを保持します。したがって、追加の保持が必要な理由がわかりません。
非同期操作をキャンセルしてその場所に新しい操作を作成するパターンを実装しようとしていることを除いて、これは私の進歩を妨げません。iPhone OS 4.0 ではまだ開発できません (waitUntilFinished を提供します)。そのため、追加の保持を解放しても安全であることを知る別の方法が必要です (または、余分な保持をまったく行わないようにする方法を見つけます)。
助言がありますか?
iphone - NSOperationQueueは、完了時に数秒間ハングするようです
UITableViewDataSource
fromプロトコルとプロトコルを実装するカスタムViewControllerがありUITableViewDelegate
ます。(私のviewDidLoad
メソッドで)テーブルのデータをロードするときに、aNSOperationQueue
とaを作成し、NSInvocationOperation
それをキューに追加します。アクティビティインジケーターを表示してviewDidLoad
終了します。
操作に使用されたメソッドは、アクティビティインジケーターのアニメーションを終了します。
NSLogでは操作のメソッドが返されたように見えますが、操作が完了すると、操作が実際に完了するまでに5〜7秒の休止があることに気付きました。
Instrumentsを使用して一時停止が発生している場所を特定しようとしましたが、CPU時間のほとんどがシステムライブラリに費やされているため、それからはわかりません。
編集 これは省略形です:
明確にするために、キュー内の最後の操作は次のとおりです。
ログに表示されるのは、上記のログメッセージの出力であり、その後5秒間休止し、最後にインジケーターが非表示になっているビューが続きます。
何か案は?
iphone - NSOperation内からNSOperationQueueをキャンセルする
NSOperationQueue
を初期化してから3つのクラス(、、、)を追加ClassA
しClassB
てClassC
次々に実行するiPhoneSDK4.0コードがあります。ClassA
、、ClassB
およびClassC
はすべて。のサブクラスですNSOperation
。
関連するコードは以下に含まれています。
依存関係の理由は、操作が正常に完了したclassB
場合にのみ実行する必要があるためです。classA
同様に、正常に完了したclassC
場合にのみ実行する必要があります。classB
現時点では、たとえば、正常に完了しなかったclassB
場合に実行されないようにする方法を理解するのに苦労しています。classA
この例を続けて、私はどういうわけか[NSOperationQueue cancelAllOperations]
内部から呼び起こすことを考えていましたが、内部(サブクラス)からclassA
親のハンドルを取得する方法がわかりません。これは私の最初の考えだったので、同じ結果を達成するための他のより良い提案を受け入れるでしょう!NSOperationQueue
classA
NSOperation
各クラス内には、正しく完了したかどうかを判断するための条件付きコードがあります。現時点では、デバッグ目的でコンソールに対して「成功」または「失敗」のNSLを記録しています。NSLog(@"Fail")
完璧な世界では、各クラスのステートメントを、NSOperationQueueの他のすべてのクラスの実行を停止するコードに置き換えられるようにしたいと思います。
どんな提案でも大歓迎です(そして感謝します)。