【问题标题】:app closes due to memory issue应用程序因内存问题而关闭
【发布时间】:2017-07-22 07:03:19
【问题描述】:

我的应用在需要下载大量图像时会在同步过程中自行关闭。

它在模拟器上运行得非常好,但是当我在设备上运行它时,它会在控制台中下载一些带有“由于内存问题而终止”警告的图像后关闭。

如果我减少要下载的图像数量,它可以在设备上正常工作。

有什么建议吗?

【问题讨论】:

  • 显示如何下载和检索图像的代码。
  • 我遇到了同样的问题,除了我的所有图像都嵌入在我的应用程序中。你有没有找到解决这个问题的方法?

标签: ios objective-c memory


【解决方案1】:

这些可能是由于内存问题而发生的。您的模拟器在 mac PC 上运行。因此应用程序可以轻松运行而不会出现内存问题。但设备由于其内存无法处理此问题。

根据您的情况,您的任务很繁重。

  1. 主要的事情,你必须在异步后台线程中运行下载任务。使用NSURLSessionDownloadTask
  2. 尽量降低图片的原始质量,这样可以实现快一点。
  3. 转到 Xcode 并选择 "show the debug navigator (left side) and check Memory and Energy Impact"。现在运行应用程序并执行相同的操作。这将帮助您确定所使用的应用内存和能源。
  4. Instruments 帮助您监控您的应用究竟在哪里崩溃。
  5. 检查您将在"Windows->Devices->Select your device on left side -> View Device Logs" 中获得的崩溃报告,然后选择您应用的最新崩溃日志。

【讨论】:

  • 嗨,我正在异步后台线程中运行下载任务,但应用程序仍在关闭。我认为操作系统由于内存问题而杀死了该应用程序。我还能做些什么来解决这个问题?
  • @Shelby 我遇到了同样的问题,除了我的所有图像都嵌入在我的应用程序中。你有没有找到解决这个问题的方法?
  • 您好,我认为您对此无能为力,我不知道为什么 Apple 让它变得如此复杂。无论如何,我已经通过减小图像大小、更少的内存 = 更快的下载过程来解决我的问题。另外,看看你是否可以使用“beginBackgroundTaskWithExpirationHandler”方法,并将你的同步代码放在这个方法中,这将阻塞线程3分钟,你的应用程序即使在后台运行,操作系统也不会关闭它3分钟(仅使用如果对您可行)。干杯。
【解决方案2】:

如果您将下载的图像存储在内存中,您最终会耗尽内存。

也许更好的方法是缓存您下载的每张图片,而不是将它们全部保存在内存中。

有一些库可以帮助您解决这个问题,

目标-C:https://github.com/rs/SDWebImage https://github.com/path/FastImageCache斯威夫特:https://github.com/Haneke/HanekeSwift

【讨论】:

    【解决方案3】:

    在模拟器中,它有足够的内存来存储数据及其使用计算机的速度。所以你没有遇到任何问题。当你尝试在 Device 中做同样的事情时,它的空间非常有限。

    图像下载过程相同,需要大量内存和过程。我们每次都有很多机会下载图像。您需要将图像存储到捕获内存中,第二次,您需要从中检索。

    您可以为此使用SDWebImage

    目标-C:

        #import <SDWebImage/UIImageView+WebCache.h>
        ...
        [imageView sd_setImageWithURL:[NSURL URLWithString:@"imagepath"]
                     placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    

    斯威夫特:

    import SDWebImage
    
    imageView.sd_setImage(with: URL(string: "imagepath"), placeholderImage: UIImage(named: "placeholder.png"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多