我有这个简单的应用程序,有一个简单的菜单屏幕。但由于某种原因,内存超过130 MB,CPU总是超过80%。这是正常的吗?或者我做错了什么?
以下是剖析图片:
这是菜单场景:
以下是调试导航器:
以下是代码:
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以上。为什么会这样?
答案 0 :(得分:1)
这实际上很难回答,你在做什么是一个好方法,我的意思是使用仪器工具来分析。这只是我的2美分,根本原因可能是关于动画。 如果您执行动画但没有正确停止它们,它们仍在运行并消耗您的记忆。我在定制表视图单元格包含动画时遇到过这种情况。我没有在单元格解除分配之前停止动画,所以它仍然存在并消耗内存。
答案 1 :(得分:1)
您实际上是在检查真实设备吗? Xcode模拟器使用的内存大约是实际设备的3倍,CPU使用率总是非常高。
在真实设备上运行时,您会发现CPU使用率会下降很多,内存将降至约40-50Mb。这对于spriteKit游戏来说是正常的,你无需担心。