Сбой NSCache при достижении предела памяти (только на iOS 7)

Мы используем NSCache для UIImages в нашем приложении. Это отлично работает на версиях iOS меньше 7. Когда появляется предупреждение о памяти, NSCache освобождает объекты, как и предполагалось. Однако на iOS 7 наше приложение вылетает вскоре после первого предупреждения о памяти. Таким образом, создается впечатление, что объекты, хранящиеся в NSCache, никогда не освобождаются, но кэш увеличивается до тех пор, пока не произойдет сбой приложения. Профилирование с помощью инструментов подтверждает это подозрение.

Кто-то еще испытывал эту проблему, и вы нашли обходной путь или уже отследили ошибку?

Похоже, у этих ребят была такая же проблема:http://www.photosmithapp.com/index.php/2013/10/photosmith-3-0-2-photo-caching-and-ios-7/

Я создал небольшое приложение для иллюстрации проблемы. Когда кнопка нажата, метод-(IBAction)fillCache:(id)sender называется. С этого момента таймер звонит-(void)addImageToCache:(id)sender каждые 100 мс В этом методе UIImage генерируется и записывается в кэш.

На iPad Mini с iOS 7.0.3 и 512 МБ памяти происходит сбой после ~ 350 итераций.

На iPad 2 с iOS 5, а также с 512 МБ памяти он также в какой-то момент вылетает, но только после как минимум 3000 итераций. Инструменты показывают, что количество экземпляров UIImage уменьшается каждый раз, когда появляется предупреждение памяти. Это не так на iOS 7.

- (IBAction)fillCache:(id)sender
{
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(addImageToCache:) userInfo:nil repeats:YES];
}

- (void)addImageToCache:(id)sender
{
    @autoreleasepool {

        CGRect rect = CGRectMake(0, 0, 500, 500);
        UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        NSString *poolKey = [NSString stringWithFormat:@"junk_%d", count++];
        [self.cache setObject:image forKey:poolKey];

    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос