У меня есть приложение, которое кэширует большие изображения, чтобы пользователь не ждал imageWithContentsOfFile. Как правило, я кэширую предыдущее и следующее изображение.
1) Могу ли я сделать это кэширование адаптивным в зависимости от доступной памяти в iPad? Если да, то каким должен быть порог? Ниже приведена функция для расчета доступной памяти.
-(void) report_memory {
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&info,
&size);
if( kerr == KERN_SUCCESS ) {
Log(@"Memory in use (in bytes): %u", info.resident_size);
} else {
Log(@"Error with task_info(): %s", mach_error_string(kerr));
}
}
2) Я знаю, что нет никакого способа (кроме частного/недокументированного API) узнать предупреждение об уровне памяти, иначе это может быть хорошим фактором для определения того, сколько страниц я могу кэшировать. Но просто чтобы подтвердить, могу ли я их как-то использовать.
3) Прямо сейчас я думаю о кэшировании 3 экранов (с 6 изображениями), и в случае, если мой ViewController получит предупреждение о памяти, я выгружаю все экраны, кроме видимого, и сбрасываю количество экранов для кэширования до 2 (4 изображения). Но я не нашел его оптимизированным, потому что либо я кэширую меньше, чем возможно, либо в некоторых условиях даже загрузка 4 приводит к сбою.