簡體   English   中英

Xcode 7 / Swift 2.1“來自調試器的消息:由於內存問題而終止”

[英]Xcode 7/Swift 2.1 “Message from debugger: Terminated due to memory issue”

我正在使用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已經指出的那樣,圖像可能非常耗費內存。 根據我的經驗,運行時還會將圖像在使用后的一段時間內保留在后台中。 這可能與您的情況有關,因為查看您的代碼,每次調用動畫時,您都會加載一組12個圖像。 如果你經常迭代那個動畫那么很快就會增加很多內存,特別是對於1MB的圖像文件。 在這種情況下,雖然在短期內它似乎效率低下,但您可能需要考慮在初始化類時初始化圖像數組,您可以重復使用它。

  2. 迭代一個你知道將要占用大量內存的循環時,你可以做的一件事就是將它放在autoreleasepool中。 請參閱開發人員參考: https//developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html我知道技術上ARC應該是現代iOS世界中所需要的,但是當我在我的一個應用程序中構建一個非常數據密集的過程時,我為我工作。

  3. 您不太可能觸發在Simulator中運行的內存警告,因為不允許底層硬件具有比目標設備更多的可用容量這一事實。 在我的無限智慧中,我曾經留下了一些運行,最終使用了50GB的內存,但這並未觸發模擬器上的任何警告!

  4. 順便說一句,我認為你應該能夠將你的卡片圖像壓縮到遠低於1 MB。 當然這取決於你想要使用什么樣的圖像(它們是照片嗎?)但是如果它是一個簡單的.png,那對我來說似乎很大。

希望有所幫助。

我遇到了同樣的問題,發現這是我在方案中檢查啟用僵屍對象的問題。 所以你也可以檢查一下。 在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM