2014-11-18 3 views
2

Я разрабатываю приложение отображения контента, в котором есть представление таблицы и подробный вид, соответствующий каждой строке в таблице.Как управлять памятью кеширования в библиотеке AFNetworking

Существует 12 категорий, в которых загружается контент.

Я завершил приложение, и он работает нормально. Теперь мне нужно управлять потреблением памяти для кеша, поскольку во время выполнения я получаю предупреждение. Я использую AFNetowking lib для кэширования.

У вас нет проблем с функционированием приложения. Мне просто нужно сделать некоторое управление памятью и применить код.

Я пытаюсь выделить некоторую конкретную память и диск для каждой категории.

следующий код, который я использую, чтобы распределить размер бара и диска для каждой категории.

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:15 * 512 * 1024 
                 diskCapacity:10 * 1024 * 1024 
                  diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 

версия Xcode: 6,1
ТАГЕТ версия ИОС: 6,0
приложение: универсальный

+0

предупреждение памяти не обязательно означает, что это из-за кэширования. NSURLCache очищает все данные, когда приложение получает предупреждение о памяти. Вы тестируете устройство? Вы видите предупреждение памяти при удалении кода кеширования? Вы проверили инструменты, чтобы выяснить, есть ли утечка памяти? –

ответ

-1

Я думаю, что эта рекомендация не установить размер кэша. Система должна позаботиться об этом.

Обычно я использую общий NSCache и просто храню пакеты данных на основе URL-адреса. А затем преобразуйте данные обратно в любое изображение/xml/text, что я ожидал.

// This should reference an NSCache instance 
    _contentCache = [[NSCache alloc] init]; 

    // create a key for the request. 
    cacheKey = [NSString stringWithFormat:@"%@|%@",uri,body]; 
    NSData *cacheData = [_contentCache objectForKey:cacheKey]; 

    // if its in the cache, just return it. 
    if (cacheData) { 
     return cacheData; 
    } 

    // Request the data here and return it. 

_contentCache определяется в AppDelegate. Так что я могу легко ссылаться на него через приложение.

- (id) init { 

     _appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
     _contentCache = [_appDelegate contentCache]; 

     return self; 
    } 

Я отправил свой класс в GitHub. Это не полный, но полезный.

postmaster - GitHub

+0

спасибо за ваш отзыв, подумайте о решении, которое вы предлагаете. – Neal

+0

Вы не получили вопрос правильно. NSURLCache делает все эти вещи и многое другое. Проблема заключается не в том, какой механизм кэширования использовать. Для простых вещей, таких как кэширование изображений, реализующих кеш-память LRU или FIFO, это решение работает лучше всего, но требует кэширования поверх сетевой библиотеки. NSCache не предназначен для этого. –

Смежные вопросы