【问题标题】:Memory pressure downloading many images下载许多图像的内存压力
【发布时间】:2014-03-27 22:03:56
【问题描述】:

我正在尝试从服务器下载数千张图片(每张最大 350 Kb),但我浏览了超过一千张图片时收到了“内存压力”警报。

基本上我有一个包含所有图像名称的数组,并执行一个循环以像这样一对一:

for (int x=0; x<unique.count; x++) {

     NSURL *ImageLink = [NSURL URLWithString:[NSString stringWithFormat:@"http://urltoimagesfolder.com/", [unique objectAtIndex:x]]];
     NSData *data = [NSData dataWithContentsOfURL:ImageLink];
     UIImage *img = [[UIImage alloc] initWithData:data];

     if (data.length !=0) {

     NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[unique objectAtIndex:x]]; //add our image to the path

     [UIImageJPEGRepresentation(img, 1.0) writeToFile:fullPath atomically:YES];

     //[self saveImage:img :NombreFoto];
     //[self Miniatura:img :[NSString stringWithFormat:@"mini-%@", [unique objectAtIndex:x]]];
     }

    data = nil;
    img = nil;


}

问题:如何下载所有图像而不会使应用因内存压力而崩溃?

【问题讨论】:

  • 你有什么问题?
  • 已编辑如何下载所有图像而不会使应用程序因内存压力而崩溃?
  • 嗯...把img写好后放出来?

标签: ios xcode image memory download


【解决方案1】:

UIImageJPEGRepresentation() 可能会导致内存溢出。 但是您不需要使用该功能,您可以通过将消息writeToFile: 发送到data 对象来检查接收到的数据是否为图像并将其字节直接写入磁盘。

你可以像这样修复你的代码:

for (int x=0; x<unique.count; x++) {
     NSURL *ImageLink = [NSURL URLWithString:[NSString stringWithFormat:@"http://urltoimagesfolder.com/", [unique objectAtIndex:x]]];
     NSData *data = [NSData dataWithContentsOfURL:ImageLink];
     if (data.length !=0) {

         UIImage *img = [[UIImage alloc] initWithData:data];
         if (img) {
             NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[unique objectAtIndex:x]]; //add our image to the path
             [data writeToFile:fullPath atomically:YES];
         }
         img = nil;

     }
     data = nil;
}

但这不是最佳解决方案。 -dataWithContentsOfURL: 是同步方法,将在下载文件时停止执行主线程。因此,UI 将在下载期间挂起。为了使您的 UI 不挂起,您可以使用异步 url 请求。

参见NSURLConnection 类的-sendAsynchronousRequest:queue:completionHandler: 方法。或者,如果您的应用仅适用于 iOS 7,请参阅-dataTaskWithURL:completionHandler: 作为替代方案。

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多