我非常失望,因为我有这个记忆问题已经过了一个星期,我找不到解决方案。
我的应用程序使用了很多来自Facebook的高分辨率照片。
我使用SDwebimageManager下载并缓存我的所有照片。
当我创建一个photoviewcontroller的实例时,平均有四十张照片被下载和缓存,并且出现在屏幕上。
如您所想,我必须经常为我的控制器的每个实例清除Cache。
但是,我有SDWebimage的问题我无法清除缓存...免费物理内存的大小正在下降,我的应用程序崩溃总是很快
我正在使用故事板来创建这样的控制器(正如你可以看到我先清除缓存):
if([[segue identifier] isEqualToString:@"FriendView"])
{
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
if (self.friends != nil) {
[self.friends release];
}
NSString *s = [friendsid objectAtIndex:indexload];
self.friends = (MyFriendViewController *)[segue destinationViewController];
self.friends.friend = s;
self.friends.Manager = self.Manager;
}
在控制器中,我使用我的经理下载每张照片:
for(int i=0;i<items.count;i++) {
[self.Manager downloadWithURL:[NSURL URLWithString:[self.items objectAtIndex:i]]
delegate:self
options:0
success:^(UIImage *image,BOOL cached )
{
[self.photosload setObject:image forKey:[NSString stringWithFormat:@"%i", i]];
if (photosload.count == items.count) {
[self.collectionView reloadData];
}
}
failure:nil];
}
我使用NSDictionary收集我的所有照片,并在下载最后一张照片时 我重新加载我的集合视图。 如果我回到我的ui并重新加载我的控制器,我的记忆力会增长,我会很快发出警告......应用程序崩溃了。
使用SDCache清除内存缓存时没有任何反应。
这很奇怪,因为如果我在这一行之后放了一个[图像发布]:
[self.photosload setObject:image forKey:[NSString stringWithFormat:@"%i", i]];
[image release];
当我打电话给SDImagecache时,我的记忆被清除了,但你可以想象......如果我这样做...... 我刚刚使用这个词典“photosload”和一个collectionview,因为当我在collectionview中滚动时,我释放了每个图像,我的应用程序崩溃...
我完全失望,我不知道发生了什么......
非常感谢你的帮助,我完全陷入了这个记忆问题
答案 0 :(得分:0)
如果我错了,请纠正我,但我认为您的问题在于下载所有项目,即使是那些您目前不需要的项目。您是否同时在屏幕上显示了所有40张图像?我认为你有一个集合视图,同时屏幕上只有几个。
因此,如果我是对的,您不必在循环中下载所有这些内容,只在您需要时下载它们,最常见的情况是您显示新图像时。您将重用UIImageView并使用新URL填充它。如果您使用的是SDImage库,则必须加载如下图像:
[imageView setImageWithURL:[NSURL URLWithString:self.items objectAtIndex:i]]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
它应该自动缓存您的图像。收到内存警告时应清除缓存,但这不会有问题。
这就是SDImage
的工作原理:
当您致电[imageView setImageWithURL:URL placeholderImage:Image];
时,它会检查memcache
只有NSDictionary
,然后如果在memcache中没有此类网址,则会搜索磁盘以获取此网址的已保存图片如果失败,它将开始下载并缓存您的图像。因此,当您收到内存警告时,您必须仅使用SDImageCache
来呼叫clearMemory
。