【发布时间】:2012-10-14 23:29:12
【问题描述】:
我很失望,我有这个记忆问题已经一个多星期了,我找不到解决办法。
我的应用使用了大量来自 facebook 的高分辨率照片。
我使用 SDwebimageManager 下载和缓存我的所有照片。
当我创建我的 photoviewcontroller 实例时,平均有 40 张照片被下载和缓存并出现在屏幕上。
正如你想象的那样,我必须经常为我的控制器的每个实例清除缓存。
但是,我的 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 清除内存缓存时没有任何反应。
这很奇怪,因为如果我在这行后面放一个 [image release] :
[self.photosload setObject:image forKey:[NSString stringWithFormat:@"%i", i]];
[image release];
当我调用 SDImagecache 时,我的内存被清除了,但你可以想象......如果我这样做...... 我将这本字典“photosload”与一个集合视图一起使用,因为当我在集合视图中滚动时,我释放了我的应用程序崩溃的每张图像......
我很失望,我不知道发生了什么......
非常感谢您的帮助,我完全被这个内存问题所困扰
【问题讨论】:
标签: iphone ios memory memory-leaks sdwebimage