2

これが取引です。私は最近、次のコードを使用して開始時にいくつかのファイルをダウンロードするために AFNetworking を使用し始めました。

NSMutableURLRequest* rq = [api requestWithMethod:@"GET" path:@"YOUR/URL/TO/FILE"     parameters:nil];
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:rq] autorelease];

NSString* path=[@"/PATH/TO/APP" stringByAppendingPathComponent: imageNameToDisk];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@"SUCCCESSFULL IMG RETRIEVE to %@!",path)

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    // Deal with failure
}];

私のパスは実際にパス変数に差し込まれています(申し訳ありませんが、実際にテキストをパスタにコピーするのに適切なコンピューターではありませんが、パスが異なる場合は上記とまったく同じです)

そして、すべてがうまくいっています!ファイルが正常にダウンロードされ、すべてが取得されています。私の現在の問題は、キャッシングを機能させようとしていることですが、多くの問題があります。基本的に、AFNetworking 2.0 の時点でクライアント側で実際に何をしなければならないかはわかりません。NSURlCache を設定する必要はありますか? 要求操作でキャッシュ タイプ ヘッダーを別の方法で設定する必要がありますか? 完全に組み込まれているのではないかと思いましたが、ファイルに変更がなくても、コードを実行するたびに 200 のステータスを受け取ります。NSUrlCache を使用する必要がある場合、手動で成功ブロック requestoperation に e-tag を保存し、それをフィードバックする必要がありますか? 進行方法についての助けをいただければ幸いです。みんなありがとう!

4

1 に答える 1

4

AFNetworking は、デフォルトでキャッシュに NSURLCache を使用します。よくある質問から:

AFNetworking は、NSURLCacheおよびそのサブクラスによってすでに提供されているキャッシング機能を利用します。NSURLRequestオブジェクトに正しいキャッシュ ポリシーがあり、サーバーの応答に有効なヘッダーが含まれている限りCache-Control、応答は後続の要求のために自動的にキャッシュされます。

このメカニズムは をキャッシュすることに注意してくださいNSData。したがって、このキャッシュから取得するたびに、多少コストのNSDataかかるUIImage操作を実行する必要があります。UITableViewこれは、またはで画像を表示している場合など、迅速な表示には十分なパフォーマンスではありませんUICollectionView

この場合は、オブジェクトUIImageView+AFNetworkingのダウンロードとキャッシングを に追加する を見てください。一部のアプリケーションでは、すぐに使用できる実装をそのまま使用できますが、これは非常に基本的なものです。このクラスのソース コード (それほど長くはありません) を見て、独自のキャッシュ メカニズムの出発点として使用することをお勧めします。UIImageUIImageView

于 2013-11-11T20:43:59.433 に答える