Как работает NSURLCache в iOS 4? - PullRequest
3 голосов
/ 16 июня 2011

Когда я изучаю NSURLCache документацию, я не могу найти много важных заметок. Я обнаружил, что многие темы в Интернете жалуются на то, что NSURLConnection , которые используют NSURLCache , имели утечки памяти. Когда я попытался написать какое-то приложение для iOS 4.3, я обнаружил, что MSURLCache ведут себя странно.

В приложение: didFinishLaunchingWithOptions: Я установил экземпляр NSURLCache с объемом памяти 10 МБ, init NSURLRequest с NSURLRequestUseProtocolCachePolicy , но я не могу получить соединение: willCacheResponse: сообщение в моем NSURLConnection делегат. Когда я проверил объем памяти в разных точках моего приложения, это было 0 МБ. Зачем? Может быть, Apple исправит некоторые утечки памяти, установив NSURLCache объем памяти на 0? Я создал пользовательский NSURLCache и переопределил setMemoryCapacity: метод следующим образом:

-(void)setMemoryCapacity:(NSUInteger)memoryCapacity {
    if (memoryCapacity > 0) {
        [super setMemoryCapacity:memoryCapacity];
    }
    else {
        NSLog(@"zero here");
    }
}

Тогда я начал отлаживать. В моем приложении есть текст для ввода, где пользователь вводит URL. Новый setMemoryCapacity: вызывался дважды: в моем приложении-делегате, когда я устанавливал емкость 10 МБ, и (это очень интересно), когда пользователь устанавливал фокус на ввод текста (параметр memoryCapacity было 0, и я получаю строку «ноль здесь» в журнале). После этого я получил соединение: willCacheResponse: сообщения NSURLConnection делегат. Это было очень странно. Я не могу понять почему. Я не могу найти что-то в руководстве по этому поводу. У тебя есть мысли?

...