NSMutableURLRequest
NSURLConnection
NSOperationQueue
を使用して自前で実装したりフリーのライブラリを使用して受信データをNSDataに格納する人が多いと思いますが、実はNSDataには指定されたURLからデータを取得する
/*
*指定されたurlからデータを取得する
*@param url データを読み込むurl
*@param readOptionsMask 読み込んだデータをキャッシュしない等のオプション指定
*@param errorPtr エラーが発生した際のエラー格納先
*@return 受信データ
*/
*指定されたurlからデータを取得する
*@param url データを読み込むurl
*@param readOptionsMask 読み込んだデータをキャッシュしない等のオプション指定
*@param errorPtr エラーが発生した際のエラー格納先
*@return 受信データ
*/
+ (id)dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;
というメソッドが用意されているんですね。
使い方はいたって簡単で
使い方はいたって簡単で
こんな感じでかなり簡単に実装できます。
が、このdataWithContentsOfURLには重大な欠点があります。
それは非同期では無いという事です。
つまりデータのダウンロードが完了するまでアプリがフリーズしてしまうんですね。
しかし、ご安心くださいGCD(Grand Central Dispatch)というObjective-Cの機能を使用すれば簡単に非同期にすることができるのです。
GCDの簡単な使い方は
dispatch_queue_t q_global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q_main = dispatch_get_main_queue();
dispatch_async(q_global, ^{
// ここに非同期(バックグラウンド)で実行したい処理を記述
こうなります。が、このdataWithContentsOfURLには重大な欠点があります。
それは非同期では無いという事です。
つまりデータのダウンロードが完了するまでアプリがフリーズしてしまうんですね。
しかし、ご安心くださいGCD(Grand Central Dispatch)というObjective-Cの機能を使用すれば簡単に非同期にすることができるのです。
GCDの簡単な使い方は
dispatch_queue_t q_global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q_main = dispatch_get_main_queue();
dispatch_async(q_global, ^{
// ここに非同期(バックグラウンド)で実行したい処理を記述
});
こんな感じです。
GCDを使って先ほどのdataWithContentsOfURLを非同期化すると
こんな感じです。
GCDを使って先ほどのdataWithContentsOfURLを非同期化すると
ベーシック認証なんかもdataWithContentsOfURLを使用すれば簡単に実装できます。
ツイート
0 件のコメント :
コメントを投稿