NSURLCacheのドキュメントを読んでも、多くの重要なメモが見つかりません。Web の多くのトピックで、NSURLCacheを使用するNSURLConnectionにメモリ リークがあると不満が寄せられていることがわかりました。iOS 4.3 用のアプリケーションを作成しようとしたときに、MSURLCacheに奇妙な動作があることがわかりました。
application:didFinishLaunchingWithOptions:メモリ容量 10MBのNSURLCacheのインスタンスを設定し、 NSURLRequestUseProtocolCachePolicyでNSURLRequestを初期化しましたが、 NSURLConnectionデリゲートでconnection:willCacheResponse:メッセージを受信できません。アプリケーションのさまざまなポイントでメモリ容量を確認したところ、0MB でした。なんで?NSURLCacheメモリ容量を 0 に設定することで、Apple がいくつかのメモリ リークを修正する可能性がありますか? カスタムNSURLCacheを作成し、 setMemoryCapacity:メソッドを次のようにオーバーライドしました。
-(void)setMemoryCapacity:(NSUInteger)memoryCapacity {
if (memoryCapacity > 0) {
[super setMemoryCapacity:memoryCapacity];
}
else {
NSLog(@"zero here");
}
}
その後、デバッグを開始しました。ユーザーがURLを入力したアプリに入力テキストがあります。新しいsetMemoryCapacity:メソッドが 2 回呼び出されました: 私のアプリ デリゲートでは、容量を 10MB に設定したときと (非常に興味深い) ユーザーがフォーカスをテキスト入力に設定したとき ( memoryCapacityのパラメーターが 0 で、ログに "zero here" という文字列を受け取りました) )。その後、connection:willCacheResponse:メッセージをNSURLConnectionデリゲートに受け取りました。とても奇妙でした。理由がわかりません。これについては、マニュアルで見つけることができません。何か考えはありますか?