iOS開発のキャッシュ:メモリキャッシュ
6458 ワード
キャッシュを使用する目的は、使用するアプリケーションがユーザーの入力に迅速に応答できるようにするためであり、プログラムの効率的な実行です.リモートWebサーバで取得したデータをキャッシュし、同じurlへの複数回のリクエストを減らす必要がある場合があります.
メモリキャッシュはsdkのNSURLCacheクラスを使用できます.NSURLRequestでは、要求されたurlがデータをキャッシュする方法を説明するキャッシュパラメータが必要です.まず、CachePolicyタイプを見てみましょう.
1、NSURLRequestUseProtocolCachePolicy NSURLRequestデフォルトのcache policy、Protocolプロトコル定義を使用します.2、NSURL RequestReloadIgnoringCacheDataキャッシュを無視して元のアドレスから直接ダウンロードする.3、NSURLRequestReturnCacheDataElseLoadは、cacheにdataが存在しない場合にのみ元のアドレスからダウンロードされます.4、NSURLRequestReturnCacheDataDontLoadはcacheデータのみを使用し、cacheが存在しない場合、要求は失敗する.ネットワーク接続オフラインモードが確立されていない場合に使用されます.5、N S R u r L R e q u s t R o l a d I g n o r i ngLocalAndRemoteCacheData:ローカルおよびリモートのキャッシュデータを無視し、元のアドレスから直接ダウンロードし、NSURL R e q u s t R o l o adIgnoringCacheDataと類似する.6 NSURLRequestReloadRevalidatingCacheData:ローカルデータとリモートデータが同じかどうかを確認し、異なる場合はリモートデータをダウンロードします.そうでない場合はローカルデータを使用します.
NSURLCacheはまた、アプリケーションのキャッシュメカニズムを容易にするための多くの方法を提供しています.次に、同じurlに対する複数回のリクエストを減らす例を示します.次のコードを見てください.
この例ではurlがwww.baidu.comのウェブサイトを要求します.このurlがキャッシュされている場合、私たちは直接キャッシュからデータを取得します.そうしないと、www.baidu.comサイトからデータを再取得します.キャッシュサイズを1 Mに設定しました.
次のコードを使用して、要求されたプロセスを印刷します.
画面上のボタンを初めてクリックすると、印刷結果は次のようになります.
?
?
メモリキャッシュはsdkのNSURLCacheクラスを使用できます.NSURLRequestでは、要求されたurlがデータをキャッシュする方法を説明するキャッシュパラメータが必要です.まず、CachePolicyタイプを見てみましょう.
1、NSURLRequestUseProtocolCachePolicy NSURLRequestデフォルトのcache policy、Protocolプロトコル定義を使用します.2、NSURL RequestReloadIgnoringCacheDataキャッシュを無視して元のアドレスから直接ダウンロードする.3、NSURLRequestReturnCacheDataElseLoadは、cacheにdataが存在しない場合にのみ元のアドレスからダウンロードされます.4、NSURLRequestReturnCacheDataDontLoadはcacheデータのみを使用し、cacheが存在しない場合、要求は失敗する.ネットワーク接続オフラインモードが確立されていない場合に使用されます.5、N S R u r L R e q u s t R o l a d I g n o r i ngLocalAndRemoteCacheData:ローカルおよびリモートのキャッシュデータを無視し、元のアドレスから直接ダウンロードし、NSURL R e q u s t R o l o adIgnoringCacheDataと類似する.6 NSURLRequestReloadRevalidatingCacheData:ローカルデータとリモートデータが同じかどうかを確認し、異なる場合はリモートデータをダウンロードします.そうでない場合はローカルデータを使用します.
NSURLCacheはまた、アプリケーションのキャッシュメカニズムを容易にするための多くの方法を提供しています.次に、同じurlに対する複数回のリクエストを減らす例を示します.次のコードを見てください.
-(IBAction) buttonPress:(id) sender
{
NSString *paramURLAsString= @"http://www.baidu.com/";
if ([paramURLAsString length] == 0){
NSLog(@"Nil or empty URL is given");
return;
}
NSURLCache *urlCache = [NSURLCache sharedURLCache];
/* 1M*/
[urlCache setMemoryCapacity:1*1024*1024];
// nsurl
NSURL *url = [NSURL URLWithString:paramURLAsString];
//
NSMutableURLRequest *request =
[NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0f];
//
NSCachedURLResponse *response =
[urlCache cachedResponseForRequest:request];
//
if (response != nil){
NSLog(@" , ");
[request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];
}
self.connection = nil;
/* NSURLConnection*/
NSURLConnection *newConnection =
[[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:YES];
self.connection = newConnection;
[newConnection release];
}
この例ではurlがwww.baidu.comのウェブサイトを要求します.このurlがキャッシュされている場合、私たちは直接キャッシュからデータを取得します.そうしないと、www.baidu.comサイトからデータを再取得します.キャッシュサイズを1 Mに設定しました.
次のコードを使用して、要求されたプロセスを印刷します.
- (void) connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response{
NSLog(@" ");
}
- (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)redirectResponse{
NSLog(@" ");
return(request);
}
- (void)connection:(NSURLConnection *)connection
didReceiveData:(NSData *)data{
NSLog(@" ");
NSLog(@" = %lu", (unsigned long)[data length]);
}
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse *)cachedResponse{
NSLog(@" ");
return(cachedResponse);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@" ");
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error{
NSLog(@" ");
}
画面上のボタンを初めてクリックすると、印刷結果は次のようになります.
?
2011-07-30 18:50:24.910 Caching[3971:207]
2011-07-30 18:50:28.557 Caching[3971:207]
2011-07-30 18:50:31.677 Caching[3971:207]
2011-07-30 18:50:31.681 Caching[3971:207] = 4414
2011-07-30 18:50:31.682 Caching[3971:207]
2011-07-30 18:50:31.682 Caching[3971:207] = 2996
2011-07-30 18:50:38.107 Caching[3971:207]
2011-07-30 18:50:38.109 Caching[3971:207]
2回目の画面のボタンをクリックすると、次のように印刷されます.?
2011-07-30 18:52:18.894 Caching[3971:207]
2011-07-30 18:52:18.895 Caching[3971:207]
2011-07-30 18:52:18.895 Caching[3971:207]
2011-07-30 18:52:18.896 Caching[3971:207] = 7410
2011-07-30 18:52:18.896 Caching[3971:207]
「キャッシュを出力する」という項目はありません.要求されたデータは、最初の要求の累積、つまり2回目はメモリからデータを取得します.