問題タブ [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.

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

objective-c - NSOperation と UIKit の問題

NSOperation から継承されたオブジェクトを使用してダウンロードを行っています。ドキュメントを読みました。操作が完了したら、

方法。UIKit はスレッド セーフではないため、メイン スレッドで呼び出す必要があり、これらの非スレッド セーフ フレームワークの場合はドキュメントに記載されています。デリゲート メソッドで pdf または画像を描画していますが、メイン スレッドで描画されるため、描画が完了するまでユーザー インターフェイスが非常に遅くなります。この問題を回避する良い方法を教えていただけないでしょうか。

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

iphone - iPhone: NSOperationQueue 使用時のメモリ リーク

コード内のメモリ リークを見つけるために、少なくとも 30 分間ここに座っています。NSOperationQueue を使用して、(タッチ) メソッドへの同期呼び出しを非同期呼び出しに置き換えました。コードに変更を加えた後、Leak Inspector がメモリ リークを報告します。NSOperationQueue を使用するバージョンの何が問題になっていますか?

MemoryLeak のないバージョン

MemoryLeak のあるバージョン (何も表示されません)

もちろん、 touch メソッドも特別なことは何もしません。ファイルの日付を変更するだけです。

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

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

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

最近.h

最近.m

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

iphone - NSOperation によるオフスクリーン ビットマップ コンテキストでの UIImage 作成でメモリが不足する

UIScrollView のページとして機能する複数の UIView サブクラスを持つアプリがあります。UIView は前後に移動して、ユーザーにシームレスなエクスペリエンスを提供します。ビューのコンテンツは描画がかなり遅いため、NSOperation サブクラスによるロックによって保護された単一の共有 CGBitmapContext でレンダリングされます - NSOperationQueue で一度に 1 つずつ実行されます - UIImage にラップされ、コンテンツを更新するためにメイン スレッドによって使用されますビューの。

メイン スレッドで実行される UIView サブクラスの updateContentWithData: も同様に単純です。

サブクラスの drawLayer:inContext: メソッドは、UIImage から CGImage を取得し、それを使用してバッキング レイヤーまたはその一部を更新します。このプロセスには保持または解放は含まれません。

問題は、しばらくするとメモリが不足することです。UIView の数は静的です。CGImageRef と UIImage は正しく作成、保持、およびリリースされます (またはそう思われます)。インスツルメントにはリークは見られません。使用可能な空きメモリが常に低下し、数回上昇してから、アプリケーションが終了するまでさらに低下します。アプリはその前に前述のページの約 2 ~ 300 を循環しますが、大量のページが既に高速でスキミングされた後、または、画像のサイズは最大 3MB で、かなり早い段階で枯渇します。

どんな提案でも大歓迎です。

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 投票する
2 に答える
1098 参照

objective-c - 親 NSOperation でセレクターを実行する

他の NSOperations の NSOperationQueue を含む NSOperation (A と呼びます) を拡張します (これは A とは異なる別の拡張クラスであり、これらの操作を B と呼びます)。操作 A が実行中 (B 操作を実行中) に、B 操作で特定のイベントが発生したときに、操作 A で特定の関数/メソッドを呼び出すにはどうすればよいですか? たとえば、それを終了するすべての操作 B は、それ自体を返す操作 A で関数を呼び出しますか?

*ネストされた NSOperation および NSOperationQueue(s)

このモックアップ疑似コードが絵を描くのに役立つことを願っています。

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

iphone - 新しいスレッドでのXML解析

私のアプリケーションでは、ユーザーがテーブルビューをスクロールして最初のセルをプルダウンした後、新しいxmlデータをフェッチしたいと思います。データは時系列でテーブルビューに読み込まれるため、更新されたデータは最初のセルの前に表示されます。

このプロセスを新しいスレッドで実行したいので、最良のオプションは何ですか?

  1. NSThreadをサブクラス化し、そのインスタンスを使用します

  2. NSOperationをサブクラス化し、そのインスタンスを使用します

  3. NSThreadメソッドを直接使用する

よろしくお願いします。

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

objective-c - performSelectorInBackground と NSOperation サブクラスの違い

ディープ カウンター ループを実行するためのテスト アプリを 1 つ作成しました。performSelectorInBackground と NSOperation サブクラスを別々に使用して、バックグラウンド スレッドでループ関数を実行します。

また、performSelectorOnMainThread を使用して backgroundthread メソッド内でメイン スレッドに通知し、NSOperation サブクラス内で [NSNotificationCenter defaultCenter] postNotificationName を使用してメイン スレッドに UI の更新を通知します。

最初は両方の実装で同じ結果が得られ、問題なく UI を更新できました。私が見つけた唯一の違いは、2 つの実装間のスレッド数です。

performSelectorInBackground 実装は 1 つのスレッドを作成し、ループが終了した後に終了し、アプリのスレッド数が再び 1 になりました。

NSOperation サブクラスの実装は 2 つの新しいスレッドを作成し、アプリケーションに存在し続けます。main() 関数でループが終了した後、3 つのスレッドが表示されます。

それで、私の質問は、NSOperation によって作成された 2 つのスレッドと、最初のバックグラウンド スレッドの実装のように終了しなかった理由です。

私は少し混乱しており、パフォーマンスとメモリ管理の観点からどの実装が最適かを判断できません。

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

cocoa - NSOperation がデリゲートに渡されるとクラッシュする

iPhone アプリの場合、NSOperationQueue を使用して、SQLite データベースへのアクセスを一度に 1 つのクエリに制限しています。NSOperation のサブクラスを作成し、メイン関数には次のものがあります。

デリゲート側:

私が渡す理由はself、デリゲートがクエリ操作の ID (デリゲートごとに複数の要求が開かれている場合) とクエリの結果にアクセスできるようにするためです。

のドキュメントにはperformSelectorOnMainThread:withObject:waitUntilDone:、次のように明確に記載されています。

「このメソッドは、セレクターが実行されるまでレシーバーと arg パラメーターを保持します。」

ただし、デリゲート メソッドが引数にアクセスしようとすると、「EXC_BAD_ACCESS」例外がスローされます。理由について何か考えはありますか?

奇妙なことに、クラッシュする NSOperation オブジェクトへの参照の前にブレークポイントを設定すると、デバッガーは、オブジェクト インスタンスとすべてのパラメーターの値を表示することを許可します。