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

iphone - iPhoneでのNSOperation

私はNSOperation、iPhoneがアプリケーションで使用するのに理想的なツールである場合の具体的なシナリオをいくつか探していました。私の理解では、これは独自のthreadedコードを書くためのラッパーです。私はそれを使っているAppleデモアプリを見たことがないので、を使う代わりに素晴らしいツールを見逃しているのではないかと思っていNSThreadます。

ここでの理想的な解決策はNSOperation、問題を解決するためのユースケースシナリオとそれをどのように使用するかを説明することです。

0 投票する
15 に答える
50747 参照

iphone - NSOperationQueue がすべてのタスクを終了したときに通知を受け取る

NSOperationQueue持っていますがwaitUntilAllOperationsAreFinished、同期的に待ちたくありません。キューが終了したときに UI の進行状況インジケーターを非表示にしたいだけです。

これを達成するための最良の方法は何ですか?

NSOperationどれが最後になるかわからず[queue operations]、通知を受信したときにまだ空になっていない (またはさらに悪いことに、再入力されている) 可能性があるため、自分の s から通知を送信できません。

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

objective-c - iPhoneでのスレッド化でsqlite + fdbmライブラリを使用する方法

this SO questionに関連して、データの読み込みをバックグラウンドに置きたいと思います。

ただし、「ライブラリ ルーチンの呼び出し順序が間違っています」というエラーが表示されます。

このSOスレッドでは、方法はNSOperationを使用していると言っていますが、Web上のサンプルを見ると、問題を解決する方法がわかりません。

シングルトン パターンと単一の sqlite 接続を共有します。

同じデータベースを2回開くのは難しいです....

何か案は?

編集:

エラーがsqliteの呼び出しにあることを確認しました。それを呼び出すための薄いラッパーとして FDBM を使用します。

データをロードするためのメイン タスクとバックグラウンド タスクの 2 つのスレッドを実行しています。私はこのように実行します:

db インターフェースのコードはhttp://code.google.com/p/chibiorm/source/browse/#svn/trunk/srcにあります。具体的には、fdbm/ とインターフェースする唯一のユニットである Db.h/m です。 sqlite。

FDBM から sqlite 関数を呼び出そうとすると、エラーが発生しました。

たとえば、ここで起こりました:

これは FDBM コードを呼び出します。

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

iphone - NSOperation + Objective-Cカテゴリ=悪いアイデア?

iPhoneアプリのUIImageViewクラスにObjective-Cカテゴリを設定しました。このカテゴリの使命は、メモリ/ディスクキャッシングを使用してURLベースの画像を非同期にロードできるようにすることです。

これで、UIImageView + Cache.mでNSOperationQueueにアクセスできるので、読み込みスレッドを開始できます。NSOperationから派生したオブジェクトを作成し、画像のURLとターゲットのUIImageViewで初期化し、操作が完了したらターゲットで実行するセレクターを作成します。セレクターメソッドでは、新しく読み込んだ画像を設定します(または、見つからない場合は、別のプレースホルダー画像を設定します)。これで完了です。

NSOperationが完了する前にUIImageViewが削除されるまで、これは正常に機能します。たとえば、UIに前/次のセグメント化されたコントロールがあり、これらのUIImageViewが削除されて新しく追加されます(アプリで表示されているより大きな「アイテム」の一部です)ので、タップするのは非常に簡単ですこれらは急速に連続しています。

したがって、すべての画像が読み込まれる前にタップを開始することにした場合は、KABLAM!不幸なスレッドには無効なオブジェクトがあり、それを認識していません。:(

これを軽減するために私が見つけることができる最も近いものは、NSOperationのcancelメソッドとisCancelledメソッドです。ただし、カテゴリ内でキャンセルする操作オブジェクトを追跡することはできません。これは、正しく理解していれば、カテゴリはオブジェクトにIVARを追加できないためです。

多分それはカテゴリーがここで良い考えではないことを意味しますか?(泣き言:「しかし、私はカテゴリーをliiiiike!Waaah!」

アドバイスをいただければ幸いです。

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

iphone - Cocoa-NSOperationから情報を返します

Webサービスを使用してサーバーからデータを取得するiPhoneアプリがあります。Webサービスへの各呼び出しをNSOperationサブクラスに入れて、スレッド化できるようにします。私の質問は、完成したNSOperationサブクラスから情報を返すための推奨される方法は何ですか。現在、メインメソッドの最後にNSNotificationを送信しており、NSOperationの完了を待機しているコードはすべて、通知をサブスクライブします。次に、NSNotificationWithName:Object:のオブジェクト部分を使用して、操作から情報を返します。

これを行うためのより良い方法があるかどうかはわかりませんでした。Key Value Codingについて聞いたことがあり、Key Value Observingを使用して、操作のisFinishedプロパティが変更されたことを検出できましたが、ベストプラクティスがわかりません。

また、アプリケーションがスレッドセーフであることを確認しようとしています。これは、メインメソッドの最後に通知が送信され、通知内のオブジェクトが使用されない限り、問題にはならないと思います。それが終了するので、スレッドで。

最後に、私は次のように通知を呼び出しています。

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

iphone - スレッド化に NSOperation を使用すると、作成されるオブジェクトが多すぎます

SOAP 呼び出しを行うアプリがあります。UI がブロックされないようにするために、各 SOAP 呼び出しを NSOperation のサブクラスに入れています。これはうまく機能しますが、さまざまな種類の SOAP 呼び出しが大量にあります。したがって、それぞれ 10 個のポートまたはオペレーションを持つ 3 つの WSDL を使用すると、SOAP で 30 個の異なる呼び出しが発生し、それらのそれぞれを NSOperation を使用してスレッドに入れると、30 個の NSOperation サブクラスになります。

これは悪いことではないかもしれませんが、再利用可能なライブラリを作成しようとしているので、呼び出しをカプセル化する WSDL ごとに 1 つのオブジェクトがあります。WSDL2ObjC を使用しており、これによりすべてのロジックがカプセル化されるため、これは便利です。しかし、これらの多くの NSOperations で呼び出しをラップする素敵な API があるのは奇妙に思えます。また、呼び出し元が適切と思われる方法で使用できるように、API 自体でスレッド化を行っています。

どんな提案も素晴らしいでしょう。

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

iphone - NSOperation内で非同期NSURLConnectionを実行するにはどうすればよいですか?

バックグラウンドスレッドのNSOperation内で非同期NSURLConnectionを実行したいと思います。

(これは、データが戻ってきたときに、データがバックグラウンドで受信されたときに実行したい非常に高価な操作を実行しているためです)

これが私の最初の試みです:

私のAppDelegateで:

これが私の操作です:

これを実行すると、ログに次のメッセージが表示されます。

このイベントは最後に発生します[selfdidChangeValueForKey:@"isFinished"]; これは、NSOperationを間違って設定していることを示唆しています。

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

iphone - NSOperation 使用時の EXEC_BAD_ACCESS

これは、非常に異なるコードを除いて、私が抱えている問題とほとんど同じです: http://www.cocoabuilder.com/archive/message/cocoa/2009/3/24/233015

NSOperation がロードして解析する参照としてファイル名を渡し、一部の処理を NSOperation にオフロードしたいと考えています。EXEC_BAD_ACCESSと入力すると、アプリがクラッシュし-(void)initます。

操作を開始する方法は次のとおりです。

NSOperation にあるものをすべて取り除いた後でも、クラッシュが発生します。次のコードはクラッシュします。

これがクラッシュのアセンブラー出力です (私はそれが何を言っているのか理解できるほど忍者ではありません)。これは、__opLock の addOperation の直後に発生します

何か案は?:)

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

cocoa - NSProgressIndicator を NSOperation のプロパティにバインドするにはどうすればよいですか?

のステータスを反映するウィンドウがありますNSOperationNSProgressIndicatorNSOperationの進行状況プロパティにバインドするにはどうすればよいですか?

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

objective-c - Snow Leopard の NSOperationQueue はどれくらい軽量ですか?

私は、さまざまなコールバックを使用して一連の非同期操作を行うコードを使用しています。Snow Leopard は、ブロックと GCD を使用してこれを非常に簡単にしました。

私は次NSTaskのように呼び出してNSBlockOperationいます:

このアプローチは完全に機能します。コールバックが同時実行を正しく処理する限り、これはまるで魔法のようです。

ここで、これらの呼び出しのいくつかを結合できるようにしたいと考えています。これはモデル オブジェクトの「refresh」メソッド内にあり、完了するまでに時間がかかる場合があります。ユーザーが更新ボタンを押しても、マシンなどすべてが拘束されることはありません。

ここで実装のジレンマを見ることができます。一連のキュー (呼び出しの種類ごとに 1 つ) を作成し、それらの同時操作数を 1 に設定し-cancelAllOperationsて、新しい呼び出しの時間になるといつでも呼び出すことができます。

別の方法として、現在発生している呼び出しを手動で記録し、モデル オブジェクトごとに 1 つのキューを管理することも (私が行っているように)、さらに進んでグローバル キューを使用することもできます。

の重さはNSOperationQueue?多くのキューを作成することは、アーキテクチャ上の決定として不適切ですか? これらのタスクを結合するためのより良い方法はありますか?