我有一个非常奇怪的问题。我有一个scrollView
,我在其中加载从网络上拍摄的图像。它在iPad上运行良好,内存稳定且低,一个 35MB 。
每个页面我只加载相关图片,并通过设置UIImageView=nil
删除其余图片。
当我加载到滚动条中的图像不是来自网络但是从磁盘预加载时,问题就开始了,只要我滚动得更多,内存就会从30上升到200.这似乎是图片不是来自网络(离线模式),他不会发布图片,但当其在线模式时,一切都正常。
以下是我离线或在线检查如何将图像加载到滚动条:
//this method gets: or image url string(online), or UIImage(offline).
[self.imageOperationQueue addOperationWithBlock:^
{
UIImage *image ;
if(!isOffLineMode)
image=[UIImage imageWithData:[NSData dataWithContentsOfURL:userUrl] scale:1.0];
else
image=[dic objectForKey:@"userImage"];
if (image)
{
UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
[image drawAtPoint:CGPointZero];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
if (image != nil)
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^
{
UIImageView *view=thisCell.userImage;
view.image=nil;
view.image=image;
}];
image=nil;
}
}];
在这两种情况下,我使用imageview.image=nil;
清除图像。
在离线模式下出现仅问题。
答案 0 :(得分:0)
问题在于:
if(!isOffLineMode)
image=[UIImage imageWithData:[NSData dataWithContentsOfURL:userUrl] scale:1.0];
else
image=[dic objectForKey:@"userImage"];
如果它处于在线模式,那么您将加载单个图像。之后你就发布了它。但在离线模式下,您将图像存储在字典中。尝试逐个加载图像,然后尝试在不使用时释放图像。
更好的方法是将图像路径存储在字典中,而不是图像中。然后从该路径加载图像。希望这有助于.. :))
修改强>
您的评论mainData
可能会导致问题。如果在线模式是否将图像存储到mainData
?如果没有,那么我猜你发现了问题。正如你在在线模式中所说的那样,mainData只保存网址没有图像,这就是为什么内存不会上升。尝试下载并存储application document中的图像,然后将图像路径存储在mainData中。然后只需从应用程序文档加载图像。这有助于保持低内存。