为什么我的iOS应用程序占用了这么多内存和CPU?

时间:2016-04-13 02:42:17

标签: ios memory reference swift2

我有这个简单的应用程序,有一个简单的菜单屏幕。但由于某种原因,内存超过130 MB,CPU总是超过80%。这是正常的吗?或者我做错了什么?

以下是剖析图片:

enter image description here

这是菜单场景:

enter image description here

以下是调试导航器:

enter image description here

以下是代码:

import UIKit
import SpriteKit

class GameViewController: UIViewController {

  var gameScene: SKScene!
  var skView: SKView!

  override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(GameViewController.changeScene(_:)), name: "ChangedScene", object: nil)
    skView = self.view as! SKView
    gameScene = IntroScene(size: skView.bounds.size)
    gameScene.scaleMode = .AspectFill
    skView.presentScene(gameScene)
  }

  func changeScene(notification: NSNotification) {

    let message = notification.userInfo!["sceneName"] as! String

    let transition = SKTransition.revealWithDirection(.Left, duration: 1.0)
    if message == "SelectScene" {
      gameScene = SelectScene(size: skView.bounds.size)
      skView.presentScene(gameScene, transition: transition)
    }

    if message == "MatchingGameScene" {
      gameScene = MatchingGameScene(size: skView.bounds.size)
      skView.presentScene(gameScene, transition: transition)
    }

    if message == "SoundGameScene" {
      gameScene = SoundGameScene(size: skView.bounds.size)
      skView.presentScene(gameScene, transition: transition)
    }
  }

  override func shouldAutorotate() -> Bool {
    return true
  }

  override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
      return .AllButUpsideDown
    } else {
      return .All
    }
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
  }

  override func prefersStatusBarHidden() -> Bool {
    return true
  }
}

正如您所看到的,内存使用量为130mb,CPU超过80%。这是正常的吗?我期待它比130mb和80%小得多,因为包括图像在内的整个app文件只有2.5 mb以上。为什么会这样?

2 个答案:

答案 0 :(得分:1)

这实际上很难回答,你在做什么是一个好方法,我的意思是使用仪器工具来分析。这只是我的2美分,根本原因可能是关于动画。 如果您执行动画但没有正确停止它们,它们仍在运行并消耗您的记忆。我在定制表视图单元格包含动画时遇到过这种情况。我没有在单元格解除分配之前停止动画,所以它仍然存在并消耗内存。

答案 1 :(得分:1)

您实际上是在检查真实设备吗? Xcode模拟器使用的内存大约是实际设备的3倍,CPU使用率总是非常高。

在真实设备上运行时,您会发现CPU使用率会下降很多,内存将降至约40-50Mb。这对于s​​priteKit游戏来说是正常的,你无需担心。