【问题标题】:Memory goes up when loading images to scroller将图像加载到滚动条时内存增加
【发布时间】:2014-06-01 10:39:52
【问题描述】:

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

【问题讨论】:

  • 在离线模式下,你有dict,这是保留所有图像吗?
  • @Paul.s 就像这样:NSDictionary *dic=[mainData objectAtIndex:index];其中主要数据包含所有图像,而 dic 仅包含 1 个图像。但是,我用 dic=nil; 清除块末尾的 dic; ..

标签: ios objective-c uiimageview


【解决方案1】:

问题出在这里:

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

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

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

编辑:

根据您的评论mainData 可能会导致问题。如果在线模式,您是否将图像存储到mainData?如果没有,那么我想你已经找到了问题所在。正如您在在线模式下所说,mainData 仅保留 url 没有图像,这就是内存不增加的原因。尝试下载图片并保存在application document中,然后将图片路径保存在mainData中。然后只需从应用程序文档中加载图像。这将有助于保持低内存。

【讨论】:

  • 没有。你假设错误的假设。字典仅包含 1 张图像。在这里查看我的评论。
  • 就像这样:如果我处于在线模式,mainData 只保存对图像的引用,(urls)如果它的在线模式他持有实际图像。比每次, dic 都会根据离线布尔值获取 url/图像。
  • 好的,谢谢,这听起来不错。但是从 NSFileManager 将每个图像实时加载到滚动条,效果会好吗?
  • 是的,我使用它没有任何问题。该应用程序运行良好。
猜你喜欢
  • 2014-06-11
  • 2014-07-16
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 2012-08-16
  • 2016-07-20
相关资源
最近更新 更多