Watch kit App:由于内存错误而终止

时间:2015-05-19 11:39:16

标签: ios swift watchkit

您好我正在开发一个应用程序,其中我需要处理50个图像(所有图像的大小为2.5 MB),它正在追逐图像,但由于哪个应用程序崩溃,Apple Watch App中的内存增加了10 MB。

Xcode在xCode中给出错误“来自调试器的消息:由于内存错误而终止”

我正在使用的代码如下:

 for (var i : Int  = 1; i<26; i++) {

            let filenameHuman = NSString(format: "human_%d", i )
            let filenameZombie = NSString(format: "zombie_%d", i )

            var imageHuman : UIImage! =  UIImage(named: filenameHuman as String)
            var imageZombie : UIImage! =  UIImage(named: filenameZombie as String)

            WKInterfaceDevice.currentDevice().addCachedImage(imageZombie, name: filenameZombie as String)

            WKInterfaceDevice.currentDevice().addCachedImage(imageHuman, name: filenameHuman as String)

        }

        NSLog("Currently cached images: %@",WKInterfaceDevice.currentDevice().cachedImages)

内存分配和内存泄漏的屏幕截图是:

enter image description here

请帮助,提前致谢。

2 个答案:

答案 0 :(得分:1)

  • 你的任何图像是否真的是动画(会占用更多空间)?
  • 收集每次调用addCachedImage()的返回值。 False意味着无法添加 - 您需要检查它,它可能会提供有关特定问题图像的线索。
  • 在调用任何内容之前,请尝试清空缓存,删除AllCachedImages。这意味着您将使用内存池从以前的缓存交互中清除。

我认为你的问题不是漏洞,我认为你的问题是过度保留的分配。因此,使用分配工具(具有保留计数跟踪)来查看分配了多少内存(VM分配)以及有多少实体保留此类内存(保留计数)。

答案 1 :(得分:0)

在循环内部尝试自动释放图像使用的内存,因为您不希望等待自动释放在方法返回后发生。

for (var i : Int  = 1; i<26; i++) {
    autoreleasepool {
      /* code to cache images */ 
    }
}