根据可用的RAM或iOS设备的内存警戒水位自适应图像缓存

我有一个大的缓存图像,因此用户不要等待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导致崩溃。

--------------解决方案-------------

如果您正在寻找缓存尽可能多的数据可能不会导致应用程序崩溃,你总是可以利用功能didReceiveMemoryWarning的需要的时候,以去除多余的缓存。 在此功能,您不必清除一切。 你可以用它来选择清理足够的空间,目前的状况再继续高速缓存,直到它再次触发了这个警告。

另一种方法是启动一个高速缓存例行直到警告火灾。 这将允许您创建一个能够被缓存的项目数。 一旦达到这个数量,你可以有你的缓存迭代保持足够远低于数为避免出现问题。

不完全是一个深入的解释,但这些都是利用可用的标准方法应该仍然能够实现自己的目标的一些想法。

所以,等了那么久,我回答我的问题,如果它可能是有人有帮助了。

你应该避免任何未公开的API获得的警告级别,并根据该操作。 内存警告不论级别的唯一建议的操作是释放尽可能多的内存,你可以。 您可以使用基于report_memory功能(见问题)来确定多少我们可以缓存启发。 虽然我还没有进行任何测试,以计算阈值(它应该基于共RAM)。 我很想看到有人执行这些测试和更新。

该方法重置的页面缓存在内存警告数量为我的情况下正常工作。

分类:IOS 时间:2015-03-15 人气:5
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.189 (s). 10 q(s)