問題タブ [nsthread]

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

iphone - iPhone:NSThreadを使用して数千の画像をロードするためのベストプラクティス?

NSThreadを使用して何千もの画像を読み込もうとしていますが、パフォーマンスがかなり遅くなっています。

NSThreadを使用して何千もの画像をダウンロードするためのベストプラクティスは何でしょうか?

ありがとう、
ジム。

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

iphone - セカンダリ スレッドに渡されたオブジェクトをいつ解放/保持するか?

次のコードを使用して、オブジェクトをセカンダリ スレッドに渡しています。

私の質問は、autorelease はこのオブジェクトのリリースを処理する正しい方法ですか?. セカンダリ スレッドに渡されたら保持し、不要になったら解放します。

ただし、セカンダリ スレッドがオブジェクトを保持する前に、自動解放によってオブジェクトが解放される可能性はありますか? このために ivar を作成する必要がありますか? ログイン後にオブジェクトが不要になったため、ivar は適切な方法ではないようです。これを処理する最良の方法は何ですか? ありがとうございました。

-オスカー

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

iphone - NSThreadが解放されたオブジェクトに戻るとき?(iPhone)

スレッドで何かが起こっていることに要約されるように見えるメモリバグがあります。これのトラブルシューティングに問題があります。

UIViewControllerがあります。これは、アクティブな場合、つまりユーザーがそのビューを使用している場合に、NSThreadのWebサービスから更新を取得します。

これは3分ごとに実行され、この遅延は次のように制御されます。

このtimerDoneメソッドは、Webサービスデータを取得するNSThreadを開始し、performSelectorメッセージを再度送信します。これは、正常に機能する小さな「更新の確認、ビューの入力、すべてのシャットダウン、繰り返し」ルーチンです。

これで、ユーザーはもちろん突然ボタンをタップして2番目のUIViewControllerをロードできます。これが起こったとき、私は電話します:

そして、deallocメソッドでクリーンアップを行います。

私の質問は今です:ユーザーがビューを変更し、NSThreadの開始点であるこのオブジェクトの分解を開始しているときにNSThreadが実行されていた場合はどうなりますか?

NSThreadがまだアクティブであるかどうか、およびアクティブである場合はNSThreadをどうするかを示すBOOLを保持する必要があります。

スレッド化は次のように行われます。

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

objective-c - NSThread、AsyncSocket、およびオブジェクトの割り当て解除

AsyncSocket を使用するネットワーク コードがありますが、それを別の実行ループに移動します。次のコードでこのランループを作成しています。

_workerLoop は次のようになります (両方とも同じクラスにあります)。

現在、ドキュメントによると、NSThread はターゲットを保持し、このスレッドは AsyncSocket が切断されたときにのみ終了するため、ソケットが切断されるまでこのオブジェクトを解放して割り当てを解除することは不可能です。

どうすればこれを修正できますか、それとも何か間違っているのでしょうか?

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

cocoa - NSURL接続のパフォーマンス

現在、アプリでいくつかの画像をダウンロードするために NSURLConnection を使用しています。これで実装する前に、NSThread の NSData(dataWithContentOfURL) で実装しました。でも、画像のダウンロード中にキャンセルしたかったので、NSURLConnectionに変更しました。

しかし、それは別の問題が発生します。変更後のパフォーマンスは非常に低かった。例えば、NSThread(NSData async)では画像のダウンロードに5秒以上かかるのですが、NSURLConnection(async)ではそれよりも2、3倍以上!!

パフォーマンスを向上させることはできますか?? どのように??

(* NSData(dataWithContentOfFile) に関する私の質問で申し訳ありません。正しい質問は dataWithContentOfURL です)

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

iphone - NSTimerを含むNSThreadを無期限に保持しますか?(iPhone)

アプリに3分ごとに更新する必要のあるWebサービスデータがあります。私はいくつかのアプローチを試しましたが、先週ここで非常に良いアドバイスを得ました。3分ごとに新しいスレッドを構築してから、メモリのバグを回避するために、すべての異なる部分の割り当てを解除して同期する必要があります。代わりに、常に実行されている「ワーカースレッド」が必要ですが、実際の作業は、私が要求したとき(3分ごと)にのみ実行されました。

私の小さなPOCが機能するようになったので、applicationDidFinishLaunching メソッドに新しいスレッドを生成します。私はそうするようにこれをします:

わかりました。これにより、「BackgroundUpdate」オブジェクトが秒単位の更新間隔で初期化されます。アップデータの内部は、今のところ次のようになっています。

私はこれまでこのようなスレッドを使用したことがありません。私はいつも「autoReleasePoolをセットアップし、作業を行い、autoReleasePoolを使い果たして、さようなら」をしてきました。

私の問題は、initWithTimerIntervalが実行されるとすぐにNSThread、それがupdateModelメソッドに戻り、プールが空になることです。NSTimerが独自のスレッド/実行ループを持っていることに関係していると思いますか?testIfUpdateNeededスレッドで3分ごとにメソッドを実行し続けたいと思います。

では、このNSThreadをアプリの全期間にわたって存続させるにはどうすればよいでしょうか。

与えられた助け/アドバイスをありがとう:)

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

cocoa - 一定時間コードを実行し、必要に応じて強制終了します

スクリプト ブリッジを使用して、ココア アプリケーションから iTunes にクエリを実行しています。ときどき iTunes がウィンドウをポップアップ表示し (iPod の更新が必要な場合など)、ポップアップ ウィンドウが開いている間は iTunes から情報を取得できません。したがって、この状態で iTunes に情報を要求すると、そのポップアップ ウィンドウが閉じられるまで、アプリケーションは完全にロックアップします。

したがって、iTunes に別のスレッドで簡単なことを尋ねて、そこから応答を取得できるかどうかを確認できる何らかのメカニズムが必要です...そして、その別のスレッドが短時間内に応答を受信しない場合、私のメインthread はそのスレッドを強制終了するだけなので、その特定の時間に iTunes にクエリを実行しないことがわかります。

そのようなメカニズムを作成する方法はありますか?スレッドを強制終了する方法を探しましたが、見つかりませんでした。

0 投票する
4 に答える
8223 参照

iphone - NSThreadの問題について2つの引数を使用してセレクターを呼び出す

複数の引数を持つスレッドを作りたいのですが。出来ますか?私は機能を持っています:

そして、この関数をセレクターとして呼び出したいと思います。


このdetachNewThreadSelect関数のwithObjectパラメーターに2つの引数を渡す方法は?

出来ますか?

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

iphone - スレッドがキャンセルされると、スレッドのメモリはどうなりますか?

ネットワーク接続が存在するかどうかを確認するコードを書いています。一言で言えば、発生させたいイベントの順序は次のようになります。

  1. ユーザーが Web サービスから情報を要求します。
  2. タイマーが開始し、接続が存在するかどうかを毎秒チェックします。そうでない場合は、ビューを作成します。
  3. Web サービスからの情報がすべて受信されると、2 のタイマーが終了します。

私が理解していることから、Web サービスのロード中にタイマーを実行するには、タイマーを備えた新しいスレッドが必要です。私はそれを行う方法を理解しており、大丈夫です。私が理解していることから、そのスレッドを終了するには、[スレッドキャンセル]; を呼び出します。そのスレッド内からメモリ管理を処理するにはどうすればよいですか。そこにはタイマーなどがありました。

私の他のスレッドは自己終了し、終了するとその内容がすべて解放されます。キャンセルでそれを行う方法はありますか?ありがとう。

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

iphone - セカンダリ スレッドからのインスタンス属性へのアクセス (iPhone-SDK)

NSDictionary 属性を持つクラスがあります。このクラス内で、別のスレッドをディスパッチして NSXMLParser 処理を処理します。-didStartElement 内で、クラスのディクショナリにアクセスします (XML 内の要素をディクショナリ内の要素と比較するため)。

この時点で、未定義の結果が得られます。NSLog を使用して (私は XCode のデバッグに詳しくありません)、NSDictionary へのアクセスを爆撃していることがわかります。私は辞書を繰り返し、didStartElement内にキー/値をダンプしようとしましたが、これは毎回異なるキーで爆撃します。

私が結論できる唯一のことは、セカンダリ スレッドからメイン スレッドの属性にアクセスすることに関して、私が行っていることはコーシャではないということです。私はマルチスレッドに少し慣れていないので、追加のスレッドから安全に属性にアクセスするのに最適なプロトコルが何であるかわかりません。

皆さんありがとう。