-1

プロセッサの負荷の高い作業を非 UI スレッドで実行する必要があることは周知の事実であるため、これをバックグラウンド スレッドと見なします。私の場合、フィードからデータを解析し、解析したデータをデータベースに挿入しています。バックグラウンド スレッドでこの「データ解析」を処理し、UIスレッドをユーザー インタラクションに応答させたいと考えています。今の私の考えは、アプリが起動したらすぐにこの解析を開始することです。

IOS でスレッドを処理する方法についてはまったくわかりません。

誰か助けてください。

4

3 に答える 3

2

Rohan、サーバーからデータをダウンロードする予定で、デバイスのローカルデータベースにデータを挿入し、順序が重要な場合は、ASIHttpRequestAFNetworkingライブラリの使用などの非同期リクエストを調査することをお勧めします。

これは、マルチスレッドプログラミングを使用するよりも優れています。

私は第一人者ではありませんが、私自身の経験から、マルチスレッドプログラミングは、バックグラウンドでデータをダウンロードするのではなく、バックグラウンドで計算を行うためのものであることがわかりました。非同期リクエストは、バックグラウンドでデータをダウンロードするためのものです。

適切な仕事のために適切なツールを使用する必要があります。

お役に立てば幸いです。

于 2012-12-17T07:32:12.523 に答える
0

私見で最も簡単な方法は、この NSObject のメソッドを使用することです。

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;

これにより、バックグラウンドで実行され、データを解析するメソッドが呼び出されます。
終了したら、メイン スレッドに通知する必要がある場合があります。そのため、メイン スレッドで完了ハンドラを実行できます。

NSBlockOperation* completionHandler=[NSBlockOperation blockOperationWithBlock: ^
{
    // Use the parsed data
}];
NSOperationQueue* queue=[NSOperationQueue mainQueue];
[queue addOperation: completionHandler];

PS : これは、データの解析が完了したら、バックグラウンド メソッドで使用する必要があります。メインスレッドとの競合状態を引き起こす可能性のあるものを更新する必要があると思いました

于 2012-12-26T03:49:56.843 に答える
0

もう少し検索すると、何かが見つかるはずです...これは無料です:

// Declare the queue
         dispatch_queue_t workingQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
         dispatch_async(workingQueue,
                        ^{
                          // My background job
                            dispatch_async(dispatch_get_main_queue(),
                                           ^{
                                              // Update the UI
                                           }
                                           );
                        });
于 2012-12-17T07:27:00.057 に答える