2011-11-20 9 views
5

私は、最初の起動時にいくつかのデータにアクセスし、それを表示するアプリケーションを作成します。私はこの方法でこのデータをダウンロードしています:アプリを起動するときにdataWithContentsOfURLが悪いですか?

NSData *data = [NSData dataWithContentsOfURL:url]; 

これは悪いですか?今私は、GCDを使用してバックグラウンドスレッドで実行するためにこれを含むメソッドを設定しましたが、dataWithContentsOfURLは同期しているので、それは悪いです。これに関する意見はありますか?

+0

@bryanmac Apple GCDに関する質問には、grand-central-dispatchタグを使用してください。 –

答えて

5

メインのUIスレッドで実行すると悪いです。それは悪いあなたのアプリの応答性をブロックしますが、起動時にさらに悪化します。

非同期にする必要があります。そのメソッドをバックグラウンドスレッド(GCD dispatch_async)で実行するか、NSUrlConnectionの非同期メソッドを使用して実行できます。別のオプションは、NSUrlConnectionの非同期メソッドである

GCD, Threads, Program Flow and UI Updating

はここで、メインスレッド上で(後に行われる)バックグラウンドで動作して、UIを更新するために、GCDを使用した例です。ここinitWithRequest方法を参照してください:あなたがバックグラウンドスレッドでそれを実行しているとして、あなたは限り安全だ

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

+0

GDCを使ってバックグラウンドスレッドで実行すると、問題になるのでしょうか? – Yep

+0

を編集しました。GCDで実行できます。私はいくつかのポインタを追加します。 – bryanmac

+1

私はこのようにしました: 'dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT、0)、^ { // do something }); ' – Yep

3


同期ロードが不良であるという考えは、メインのUIスレッドに対してのみ有効です。メインのUIスレッドで長時間実行すると、アプリが応答しなくなります。これをバックグラウンドで行うことは、これを行う正しい方法です。また、何か問題が発生した場合にエラーを返すことができるように、

+dataWithContentsOfURL:options:error: 

を使用することを検討してください。