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

iphone - iPhoneアプリケーションでスレッドの後にスレッドをスケジュールする

スレッド完了後にスレッドをスケジュールしたい。

出来ますか ?どのように?

たとえば(私の必要性を指定するために)

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

objective-c - Objective-C の NSThread エラー

このエラーが発生しています

bool _WebTryThreadLock(bool), 0x1b53d0: メイン スレッドまたは Web スレッド以外のスレッドから Web ロックを取得しようとしました。これは、セカンダリ スレッドから UIKit を呼び出した結果である可能性があります。現在クラッシュ中...

これは何によるものですか?

ありがとう

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

uitableview - スレッドセーフな NSMutableArray の質問

NSMutableArray ( _stories ) を使用して RSS フィードのコンテンツを保存する RSS リーダーを開発しています。この配列は、アプリケーション内の 2 つの異なるスレッドによって使用されており、次の理由から、2 つの場合に同時にアクセスされる可能性があります。

  1. UITableViewController のデータソースです (コンテンツを読み取り、必要な情報をユーザーに表示します)。
  2. これは、XMLParser (インターネットからコンテンツをダウンロードし、XML データを解析してコンテンツを追加する) によって使用されます。

コードの一部を以下に示します。

UITableViewController クラスで

XMLParser クラスで

ユーザーが RSS フィードから「その他の投稿」を読み込みたい場合は、_stories配列をパーサーへの参照として渡す別の解析操作を開始します。パーサーは、他の「投稿」を配列に追加します。解析の最後までに、UITableViewController メソッドreloadDataが呼び出され、UITableView が更新されます。

解析の実行中にユーザーが UITableView を上下にスクロールするとどうなりますか? UITableViewController は(セルを作成するために) _stories配列に同時にアクセスしようとし、アプリケーションをクラッシュさせる可能性があります (非常に散発的に発生しますが発生します)?

@synchronized ブロックを使用するというアイデアについては考えましたが、どこに正確に配置する必要があるかはよくわかりません ( _stories配列は、コードの多くの場所でアクセスされます)。もう 1 つの質問は、@synchronized ブロックによってスローされる可能性のある例外をどこで処理する必要があるかということです。これにより、多くの冗長なコードが発生する可能性があります。

「非アトミック」なしで @property を使用することについても考えましたが、この問題にはあまり適していないと思います。

これを解決する方法はありますか?前もって感謝します。

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

iphone - NSThreadedデザインの委任?(iPhone)

私のアプリで非常に小さなWebサービスを大量に使用していますが、拡張性や期待どおりに機能しないいくつかの道を進んできました。

考えている設計アプローチ:viewControllerのタスクは、一般的なwebServicesClassからデータのセットを要求することです。このタスクは、新しいNSThreadで開始されます->これにより、xmlを取得するだけのオブジェクトがインスタンス化され、 webServicesClass-> webServicesClassは、この特定のWebサービスからのXMLを解析できるオブジェクトをインスタンス化するようになりました。次に、パーサーは適切なEntityオブジェクトをwebServiceClassに返します。WebserviceClassは、このデータについてviewControllerに通知する必要があります。

viewControllerは、webServiceClassDelegateといくつかのデリゲートメソッドを実装して、Webサービスリクエストが計画どおりに行われたかどうかを確認します。例:-(void)aWebserviceFailedおよび-(void)aWebserviceSuccess。

0.5実行中のWebserviceClassは別のNSThreadであるため、親オブジェクトのメインNSThreadでデリゲートメソッドを呼び出すのに問題がありますか?

1.0この設計は、さまざまなクラスのエンティティの取得、解析、および戻りを完全にカプセル化していないため、適切だと思います。ただし、さまざまなWebサービスごとに、委任メソッドを作成し、途中の各ステップで委任プロトコルを実装する必要があります。つまり、下から始めて、WebserviceClassは、XMLを取得するオブジェクト(start、fail、success)の両方に対して委任メソッドを実装する必要があり、次にXMLを解析するオブジェクト(start、fail、success)とWebserviceClassが実行できる必要があります。これらの各応答をviewControllerに委任します。このビューコントローラーは、WebserviceClassからの委任メソッド(start、fail、success)を再度実装する必要があります。これを行うためのはるかに簡単な方法はありますか?

私はデザインパターンの経験がありますが、Objective Cほど一貫して委任を使用する言語からではありません。AS3またはJavaでは、オブジェクトを介してバブルし、変更について聞いている人に通知するイベントが発生します。私が読んだすべてのObjectiveサンプルコードでは、NSNotifications(AS3またはJavaの「イベント」に相当)が0.1%の頻度で使用されているのを見ただけです。

私が説明したデザインは、多くのWebサービスに完全に対応し、潜在的なエラー/例外が発生する場所を完全に制御できるものを提供しますが、この緩い結合を取得するには多くのコードがあるようです。

1.1または、委任アプローチを完全に受け入れて作業を開始する必要があります:)

ポインタやヘルプを提供していただきありがとうございます。ソースコードなどを求めているのではなく、「これは、今説明した日常の状況でのObjectiveCのベストプラクティスと見なされます」:)

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

objective-c - NSThreadオブジェクトは2回保持されますか?

私はから派生したクラスを持っていますNSThread

他の場所(C ++関数内)で、インスタンスを作成します。

私の理解では、retain-countは1になっているはずです。別のC ++関数で、スレッドを停止して割り当てを解除したいと思います。

しかし、deallocメソッドは呼び出されません。代わりに私がする場合:

次にdealloc、retain-countが2であったことを意味するように呼び出されます。しかし、どのようにして2になったのでしょうか。

NSThread のドキュメントでは、を使用する場合の保持についてのみ言及していることに注意してくださいdetachNewThreadSelector:toTarget:withObject:

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

iphone - ダウンロード中にNSThreadを停止する

RSSフィードからロードされたテーブルビューを表示しているiPhoneアプリがあります。ビューが読み込まれたら、このメソッドを呼び出して新しい NSThread で実行します。

正常に動作していますが、xml のダウンロードまたは解析中にユーザーがビューを離れた場合、スレッドの実行を停止したいのですが、メモリ リークなしで実行を停止するにはどうすればよいでしょうか? また、停止したいときに -initWithContentsOfURL: メソッドを実行している場合、そのメソッドを停止するにはどうすればよいですか?

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

iphone - performSelectorInBackground を使用して読み込みインジケーターを実行する

私はそのようなコードを持っています:

これは問題なく動作しますが、スレッド セーフが心配です。私は2番目のスレッドでメモリを割り当てていませんが、それは単純すぎると私に言います:)

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

iphone - スレッドでの NSAssert の使用

NSAssert予期しない状況が発生した場合、アプリケーションがすぐに失敗してクラッシュ ログに意味のあるメッセージが表示されるように、iPhone アプリ全体で使用しようとしています。

これは、失敗NSAssertがメインスレッドにある場合、NSInternalInconsistencyExceptionデフォルトで発生し、キャッチされずに実行を停止するため、正常に機能します。しかし、私はバックグラウンド スレッドでも処理を行っています。この場合、NSAssertスレッドは中止されますが、プログラミングは実行され続けます。

私の現在の解決策は、メイン スレッド (この場合はNSOperationmainメソッド) で例外をキャッチして再スローすることです。

より良い方法はありますか?おそらくカスタム NSAssertionHandler を使用していますか?

assert私は、静的注釈でC を使用できることを知っています。

しかし、これでは の実際の失敗値が何であるかを示すことはできませんx

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

objective-c - Objective-C NSThreadの参照カウント規則(保持と自動解放)

私のメインプログラムは、以下を実行するスレッドを生成します。

セレクターboonk:の実行が終了する前に自動解放プールが解放される可能性があるため、これはバグのように思えます。これにより、クラッシュが発生します。

だから、私の自然な次の動きは次のようになります:

これは間違いなくバグがありませんが、....不自然に思えます。この状況を処理するためのObjective-Cの参照カウント規則またはプロトコル(クロススレッドNO-投稿待ち)はありますか、それともそれが行われる方法の上の2番目の解決策ですか?