将图像加载到滚动条时内存会上升

时间:2014-06-01 10:39:52

标签: ios objective-c uiimageview

我有一个非常奇怪的问题。我有一个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;清除图像。 在离线模式下出现问题。

1 个答案:

答案 0 :(得分:0)

问题在于:

if(!isOffLineMode)
     image=[UIImage imageWithData:[NSData dataWithContentsOfURL:userUrl] scale:1.0];
else
     image=[dic objectForKey:@"userImage"];

如果它处于在线模式,那么您将加载单个图像。之后你就发布了它。但在离线模式下,您将图像存储在字典中。尝试逐个加载图像,然后尝试在不使用时释放图像。

更好的方法是将图像路径存储在字典中,而不是图像中。然后从该路径加载图像。希望这有助于.. :))

修改

您的评论mainData可能会导致问题。如果在线模式是否将图像存储到mainData?如果没有,那么我猜你发现了问题。正如你在在线模式中所说的那样,mainData只保存网址没有图像,这就是为什么内存不会上升。尝试下载并存储application document中的图像,然后将图像路径存储在mainData中。然后只需从应用程序文档加载图像。这有助于保持低内存。