問題タブ [nsoperation]
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.
iphone - NSOperationに適したメソッドの作成
Processor
長い計算を実行するいくつかのメソッドを含むオブジェクト( )があります。NSOperation
これらのメソッドをメインスレッドとサブクラスの両方で使用したいと思います。
サブクラスコード内NSOperation
で繰り返し呼び出すisCancelled
ので、キャンセルはかなり敏感です。ただし、操作がこれらの長いProcessor
メソッドの1つを呼び出すと、そのメソッドが戻るまでキャンセルに応答できません。
操作の有無にかかわらず使用できるようにメソッドを作成する良い方法はありますか?operation
CPUを集中的に使用するメソッドに引数を追加して、次のProcessor
ように記述することを検討しています。
他の誰かが以前にこの問題に遭遇したことがありますか?もっと良い方法はありますか?
iphone - NSOperation を使用した検索
NSURLConnection を使用して受け取ったものを検索するための検索バーを作成しようとしています。今、何かを検索すると、その文字列が非同期リクエストの URL として送信され、データが得られます。
そのデータが解析され、成功したら通知を投稿します
私のsearchresultsTableViewがリロードされます。
これらのメソッドはすべて相互に依存しているため、A がまだビジー状態のときに B を実行することはできません。私は NSNotificationCenter を使用して、それらのコードを実行するように指示しています。
しかし、私は NSOperation を試してみたいのですが、それを実装する方法がわかりません。検索リクエストを操作または使用しているすべてのメソッドに入れる必要がありますか?
これをどのように行うべきかを教えてくれるサンプルコードを教えてもらえますか? 前もって感謝します...
iphone - for ループで NSOperation をキャンセルしますか?
NSOperation
onを使用してバックグラウンド スレッドで検索を実装しようとしていiOS
ます。サブクラス化したくなかったNSOperation
ので、これが私がやっていることです:
search メソッドには、検索対象が配列内にあるかどうかをチェックする for ループが含まれています。NSOperation
を呼び出して をキャンセルするとcancelAllOperations
、for ループは引き続き配列を処理します。これを防ぎたいのですが、for ループ内からこれを呼び出すことが正当かどうか疑問に思っていました。
iphone - iPhoneのメモリ管理:self.someProperty=nilを設定した後のリリース
私はAppleがリリースしたLazyTableImagesコードを読んでいて、それらはこの効果のために何かをします(NSOperationサブクラスで):
私の考えでは、プロパティをnilに設定する前に呼び出された場合 に、これを実行します。dealloc
私の考えはここで正しいですか?効果的にリリースするので、リリースは不要ですか?self.myProperty = nil
myProperty
このコードで私が気づいたことの1つは、release
オブジェクトがすべて保持されているわけではなくdealloc
、一部だけが保持されていることです。これが私の混乱の原因です。
乾杯
core-graphics - NSOperation の CoreGraphics API からの EXC BAD ACCESS
MacRuby を使用して、NSOperation 内で CoreGraphics/CoreImage 操作を実行しようとしています。ソース ファイルを CG に読み込み、CGImageDestination を設定する API 呼び出しがいくつかあります。
次のコードを NSOperation.init に入れると、すべてうまくいきます。
しかし、同じコードを NSOperation のメイン関数に入れると、散発的に EXC_BAD_ACCESS エラーが発生します。また、NSOperation を NSOperationQueue に渡す場合のみ。main を自分で呼び出すと、問題なく動作します。
私が実行しているメインの最後に:
さらに奇妙なのは、initがメインスレッドから呼び出されなくても、initで動作することです(メインスレッド/バックグラウンドスレッドの問題ではないと思います)
何かご意見は?
objective-c - NSData を使用して生産者と消費者の問題を解決する (オーディオ ストリーミング用)
AVAssetReader を使用して PCM データを iPod トラックからバッファにコピーし、RemoteIO オーディオ ユニットで再生しています。サウンドデータをロードするための別のスレッドを作成しようとしています。これにより、ロード中にバッファからデータにアクセスして再生できます。
現在、最終的に曲のデータ全体を保持する大きな NSMutableData オブジェクトがあります。現在、次のように NSOperation を使用して別のスレッドにオーディオ データをロードします。
- AVAssetReaderOutput は、一度に最大 8192 バイトを CMBlockBuffer にコピーします
- これらのバイトを NSData オブジェクトにコピーします
- この NSData オブジェクトをより大きな NSMutableData オブジェクト (最終的に曲全体を保持する) に追加します。
- 終了したら、NSMutableData オブジェクトの各パケットにアクセスして曲を再生します
これらのバイトをコピーしながら曲を再生できるようにしようとしています。同時にファイルへの書き込みと読み取りを行う良い方法が何であるかはわかりません。
私が持っていた短いアイデア:
- それぞれ長さが 8192 バイトの 3 つの NSData オブジェクトをバッファとして作成し、埋めます。
- プレイを開始します。最初のバッファの再生が終了したら、新しいデータを最初のバッファにロードします。
- 2 番目のバッファーの再生が終了したら、新しいデータを 2 番目のバッファーに読み込みます。三代目も同じ
- 再び最初のバッファから再生を開始し、3 番目のバッファを埋めます。等々。
または、3 * 8192 PCM ユニットを保持する 1 つの NSData オブジェクトを作成し、何らかの方法で 2 つの異なるスレッドで同時に書き込みおよび読み取りを行います。
現在、2 つの異なるスレッドでコードを実行しています。再生を押すまで配列にデータを追加します。その時点で停止し (おそらくスレッドがブロックされているためですが、今はわかりません)、ロードしたものの最後に到達するまで再生され、EXC_BAD_ACCESS 例外が発生します。
要するに、コピー中に PCM データを再生する正しい方法を見つけたいと思っています。たとえば、一度に 8192 バイトです。おそらく別のスレッドで行う必要があります(現在NSOperationを使用しています)が、できればより高いレベルのObjective-Cメソッドを使用して、同時にバッファへの書き込みと読み取りを行う方法が不明です。
iphone - NSOperationQueue の割り当てを適切に解除する
ユーザーが突然アプリを終了したときに通常発生する可能性のある操作がまだ実行されている場合に備えて、ivar NSOperationQueue の割り当てを解除する適切な方法を知りたいです。いくつかの例では、次のように、waitUntilAllOperationsAreFinished が使用されているのを見ました。
p>ただし、実行ループがハングアップするため、多くの人がそうしないように提案しています。では、を解放する適切な方法は何_queue
ですか? 操作が完了するのを待たずにリリースを続行するとどうなりますか?
cocoa - ファイル/ディレクトリが選択されたらすぐにNSOpenPanelを閉じます
NSOpenPanel / NSSavePanel/NSPanelは初めてです。NSOpenPanelを使用して、アプリが反復処理するファイルのディレクトリを選択し、かなり時間のかかる処理を実行しています。
パネルで-closeを呼び出すことはできますが、メインウィンドウにフォーカスが戻りません。パネルを「閉じる」ことについてはたくさん読んだことがありますが、パネルやウィンドウを「閉じる」のではなく「閉じる」方法は見つかりませんでした。
バックグラウンドスレッド(NSOperation)を生成する必要があるだけですか?
これは私の-chooseDidEnd:returnCode:contextInfo:
NSOpenPanelは消えますが、NSProgressIndicatorはアニメーション化されず、メインウィンドウは-doLotsOfTimeConsumingWork:が完了するまで表示されません。
更新 NSOperationSampleコードを確認したところ、そのように見えます。
cocoa - NSOperation 内でオブジェクトを自動解放しても安全ですか?
NSOperationQueue で NSInvocationOperation タイプの操作を実行していますが、オブジェクトを自動解放しても安全かどうか疑問に思っていました。つまり、操作ごとに開始されたスレッドに独自の自動解放プールがあることが保証されている場合です。
操作用の自動解放プールに関するドキュメントは見つかりませんでした。実際、Apple のドキュメントを読むと、独自の自動解放プールを定義する必要があることがわかります。
ただし、1) インストルメントにリークは見られません。少なくとも、操作で独自の自動解放プールを割り当てた場合よりも多くはありません。
2) デバッガーを見ると、次のスタック トレースが表示されます。
つまり、CFAutoreleasePool があるように見えます。このオブジェクトは、操作が完了したときに、自動解放されたすべてのオブジェクトに対して release を呼び出すと想定しても安全ですか?
iphone - iphone - サーバーにデータを送信し、NSOperationQueue を使用する
私のアプリケーションでは、サーバーに多くのレポートを送信する必要があります。そこで、NSOperation を拡張するクラス SendReport を作成しました。
ここで、View Controller クラスで NSOperationQueue を作成し、複数のオブジェクトを作成してキューに追加します。
SendReport の "main" で、NSMutableURLRequest と NSURLConnection を作成し、サーバーへのデータの送信を開始したい ... また、NSURLConnection のデリゲートをオブザーバー データ転送に実装し、それが終了したときに.....
データをサーバーに転送し、デリゲートを実装する「SendReport」クラスを実装する方法を教えてもらえますか?