gpt4 book ai didi

ios - Xcode 7/swift 2.1 "Message from debugger: Terminated due to memory issue"

转载 作者:IT王子 更新时间:2023-10-29 05:44:11 26 4
gpt4 key购买 nike

我正在使用 Xcode 7 在 Swift 2.1 中开发纸牌游戏,我的应用程序在模拟器中运行良好,但在我的设备上测试时崩溃。

使用断点,我已将崩溃精确定位到 NSTimer.scheduledTimerWithTimeInterval 方法,该方法在动画发生后运行(然后触发另一个动画)。

我想这可能是我的图像大小问题,因为有些图像非常大 (>4 MB),所以我压缩了动画中的所有图像,现在它们总共占用不到 1 MB。

我还运行了 Zombie 和 Leak 工具,但一无所获,所以我有点困惑。这是它崩溃的代码。

func animateOnDeal() {
self.playerAnimatedCard.hidden = false
self.dealerAnimatedCard.hidden = true
cardOneToDeal()
}

func cardOneToDeal() {
UIView.animateWithDuration(0.5, animations: {
self.playerAnimatedCard.center.x -= self.view.bounds.width
}, completion: {finished in self.flipCardOne()})
}

func flipCardOne() {
self.playerAnimatedCard.playFlipAnimation()
NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: "cardTwoToDeal", userInfo: nil, repeats: false)
}

下面是实际运行动画的代码(在 UIImageView 子类中):

func playFlipAnimation() {
self.image = UIImage(named: "cardback2.png")
self.animationImages = nil
var imgArray = [UIImage]()

for var x = 1; x <= 12; x++ {
let img = UIImage(named: "img\(x).png")
imgArray.append(img!)
}

self.animationImages = imgArray
self.animationDuration = 0.3
self.animationRepeatCount = 1
self.startAnimating()

作为旁注,调试器简单地声明:“来自调试器的消息:由于内存问题而终止。”

如有任何帮助,我们将不胜感激,如果您需要更多信息,请告诉我。谢谢!

编辑:

因此,为了对其进行更多测试,我将 func playFlipAnimation 更改为迭代并添加 5 张图像,而不是原来的 12 张。这似乎解决了崩溃问题,但我仍然不确定为什么要添加更多图像首先使应用程序崩溃。

最佳答案

几点:

  1. 正如 Derek Lee 已经指出的那样,图像可能会占用大量内存。根据我的经验,运行时还会将图像在使用后在后台缓存一段时间。这可能与您的情况有关,因为查看您的代码,每次调用动画时您都会加载一组新的十二张图像。如果您多次迭代该动画,那么这将很快增加大量内存,尤其是对于 1MB 的图像文件。在这种情况下,虽然短期内看起来效率不高,但您可能需要考虑在初始化类时初始化一组图像,您可以重复使用这些图像。

  2. 在遍历您知道会占用大量内存的循环时,您可以做的一件事是将它放在自动释放池中。请参阅开发人员引用:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html我知道从技术上讲,ARC 应该是您在现代 iOS 世界中所需要的一切,但当我在我的一个应用程序中构建一个数据密集型过程时,它对我有用。

  3. 您不太可能触发在模拟器中运行的内存警告,因为没有考虑到底层硬件比目标设备拥有更多的可用容量这一事实。以我无限的智慧,我曾经让一些东西继续运行,最终使用了 50GB 的内存,但并没有在模拟器上触发任何类型的警告!

  4. 顺便说一句,我认为您应该能够将卡片图像压缩到远小于 1 MB。当然,这将取决于您要使用哪种图像(它们是照片吗?),但如果它是一个简单的 .png,那么对我来说这似乎很大。

希望对您有所帮助。

关于ios - Xcode 7/swift 2.1 "Message from debugger: Terminated due to memory issue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33967646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com