2011/11/29

iOS5で画像を非同期ロードして表示するには?

iOS5になってからは自動メモリ管理(automatic reference counting)やNSURLConnectionのデリゲート仕様の変更などにより、従来のコードでは画像をうまく非同期ロードできない場合がある。

そんなときは次のNSURLConnectionのクラスメソッドを実装すればよい。

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

iOS5でもかつてのNSURLConnectionデリゲートメソッド(現在はNSURLConnectionData protocolのものか)によって非同期通信が実現できないわけではないらしいが、マルチスレッドでアプリを動かす場合には注意が必要とのこと。いずれにしても今後はsendAsynchronousRequestを利用した方がベターということであろうか。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection



iOS4.3以前であれば、次のようなライブラリがあり、かつてはよく使用されていたと思われる。

AsyncImageView
UIImageViewを継承したクラスライブラリ。
非同期通信で画像をロードし、UIが固まるのを防いでくれる。

ASIHTTPRequest
CFNetwork APIのラッパーで非同期通信をラクにするライブラリ。

0 件のコメント:

コメントを投稿