0

我正在构建一个数据存储,以跟踪存储在我的应用程序中的所有远程图像。我决定使用一个单例来跟踪所有被引用的图像。

我记得,iOS 会根据最近的使用情况自动开始从内存中清除对象,无论它是否被当前视图控制器引用等等。但是,如果我将这些图像存储在数据存储中,这些对象总是被引用商店本身。我的内存管理解决方案是跟踪上次调用图像的时间,并对存储在数据存储中的图像的数量和大小保持某种形式的限制,并根据年龄清除最旧的图像。

这个解决方案是一个好的解决方案吗?为什么或者为什么不?我应该依赖苹果的自动内存管理,还是让我自己的经理好吗?

进一步说明:

以下是从我的一个视图控制器请求图像最终将如何使用我的解决方案:

[[HollerImages store]getImageWithUrl:@"https://www.google.com/logos/classicplus.png" 
                     completionBlock:^(BOOL succeeded, UIImage *image){
                        if( succeeded ){
                            //Update the UIImageView with the returned image
                        }
                     }];

然后,商店将管理应用程序中当前引用的图像数量,并在我们达到某个预定义的限制时自动取消引用旧图像。想法?

4

2 回答 2

0

Renaud Boisjoly (@rboisjoly) 刚刚向我发送了一个指向该库的链接,该链接似乎提供了我所描述的解决方案:https ://github.com/rs/SDWebImage/

于 2012-07-25T19:07:41.623 回答
0

处理内存问题的最简单方法是只实现该-(void)didReceiveMemoryWarning函数并清除那里的所有缓存数据。

您正在谈论的是实现过​​期缓存。您可以在每次插入时计算数据结构中的元素,并在达到限制时从头部删除元素(前提是它是有序的数据结构)。前一种解决方案更容易,并且在大多数情况下都有效。

于 2012-07-25T19:09:23.923 回答