我有一个缓存大图像的应用程序,这样用户就不用等待 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 会导致崩溃。