1

私はしばらくJSONパーサーに取り組んできましたhttps://github.com/nathanday/ndjson完全なドキュメントではなくバイト ストリームを解析し、通常のプロパティ リスト オブジェクトではなく CoreData エンティティまたはカスタム オブジェクトに直接変換します。私はバージョン 1.0 に近づいていますが、NSURLConnection 接続を適切にサポートし、圧縮された JSON バイト ストリームの解析を容易にするポイントに到達しました。解析が内部的に機能する方法を変更して、繰り返し呼び出せるようにする必要があります (オブジェクト NSURLConnectionDelegate didReceiveData: メソッドなど)。考えられる 2 つの選択肢があります。最も簡単な方法は、スレッドを使用して次の利用可能なデータを待機することです。または、コードの解析部分を書き直して、繰り返し呼び出すことができるようにすることもできます。最後は、呼び出し間で維持する必要がある変数用に独自のステークを作成することでした。スレッドの使用は、書き換えがほとんど必要ないため最も簡単ですが、これは一般的な使用のためのライブラリであると想定されているため、iPhone のようなリソースに制約のあるデバイスで必要以上のスレッドを作成することを懸念しています。もちろん、他のオプションはコードをより複雑にし、独自のスタックを維持する必要があるため、リソースを解放することはできません。誰か良いアドバイスや別の可能な選択肢がありますか? スレッドの作成は高価です。誰かがブロックを使用して創造的な方法を考えることができるか、または NSRunLoop オブジェクトを呼び出して次のイベント (NSURLConnectionDelegate メソッド) を実行することは可能ですか? もちろん、他のオプションはコードをより複雑にし、独自のスタックを維持する必要があるため、リソースを解放することはできません。誰か良いアドバイスや別の可能な選択肢がありますか? スレッドの作成は高価です。誰かがブロックを使用して創造的な方法を考えることができるか、または NSRunLoop オブジェクトを呼び出して次のイベント (NSURLConnectionDelegate メソッド) を実行することは可能ですか? もちろん、他のオプションはコードをより複雑にし、独自のスタックを維持する必要があるため、リソースを解放することはできません。誰か良いアドバイスや別の可能な選択肢がありますか? スレッドの作成は高価です。誰かがブロックを使用して創造的な方法を考えることができるか、または NSRunLoop オブジェクトを呼び出して次のイベント (NSURLConnectionDelegate メソッド) を実行することは可能ですか?

4

1 に答える 1

1

iOS および OS X では、Apple は頭を悩ませることなくスレッドを実行する優れた方法を提供しています: Grand Central Dispatch です。スレッドは高価ではなく、システムがスレッドを作成します。

シリアル キューを使用してデータを処理し、ブロックを使用してメイン スレッドで同期できます。

// create the queue that will process your data:
dispatch_queue_t dataProcessQueue = dispatch_queue_create("data process queue", NULL); // the name is there for debugging purposes
    //dispatch to the newly created queue, and do not wait for it to complete
    dispatch_async(dataProcessQueue, ^{
        //your asynchronous job
        dispatch_async(dispatch_get_main_queue(), ^{
            // the work that has to be done on your main thread using data from above
    });
});
// don't forget to release the queue
dispatch_release(dataProcessQueue);

並行作業を行う必要がある場合は、並行キューを使用する必要があります。

Apple のドキュメントはこちら

于 2012-08-14T12:38:10.120 に答える