ios - SpriteKit Tileset 内存泄漏

标签 ios swift sprite-kit sktilemapnode

我正在尝试使用 SpriteKit 创建 2d 平台游戏。游戏包含 21 个关卡,这意味着 21 个场景和 21 个图 block 集。 每个场景包含多个图 block 节点,所有这些图 block 节点仅使用 1 个图 block 集。 有时我发现我的游戏消耗了近 2GB 内存,有时还会因内存问题而终止。

enter image description here

我开始使用仪器调查内存泄漏的原因。我发现了 4 个泄漏,如所附屏幕截图所示。 负责的库是 JavaScriptCore,我不知道这到底意味着什么。

enter image description here

因此,我继续调查并尝试从项目中删除代码块和 Assets ,以了解发生了什么。

最后我的项目包含:

  1. GameViewController 看起来与 XCode 模板中的 GameViewController 完全相同。
  2. SKScene 的空子类
  3. 1 个场景
  4. 21 个图 block 集

GameViewController 的代码:

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    if let scene = GKScene(fileNamed: "GameScene") {
        if let sceneNode = scene.rootNode as! SKScene? {
            sceneNode.scaleMode = .aspectFill
            if let view = self.view as! SKView? {
                view.presentScene(sceneNode)
                view.ignoresSiblingOrder = true
            }
        }
    }
}


override var shouldAutorotate: Bool {
    return true
}


override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    if UIDevice.current.userInterfaceIdiom == .phone {
        return .allButUpsideDown
    } else {
        return .all
    }
}


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


override var prefersStatusBarHidden: Bool {
    return true
}

}

因此,没有可能导致泄漏的代码,并且游戏在峰值时仍然消耗 2GB。 只有当我从项目中删除除关卡所需的图 block 集之外的所有图 block 集时,内存消耗才变得正常,例如〜200mb。

enter image description here

我猜测 SpriteKit 将所有图 block 集加载到内存中,尽管场景的所有图 block 节点仅使用 1 个图 block 集。

此外,如果我将图 block 集放回项目并从场景中删除所有图 block 节点,游戏也会运行良好。

我的问题是如何正确处理这种情况?

谢谢!

更新1:内存图已附上 Update2:提供GameViewController代码

enter image description here

最佳答案

试试这个:

打开Info.plist文件,添加新行,

键:“首选OpenGL” 类型:“ bool ” 值:"is"

关于ios - SpriteKit Tileset 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55078308/

相关文章:

swift - Apple Mach-O 链接器错误。 "_OBJC_CLASS_$_SwiftObject"和基金会未定义

sprite-kit - SpriteKit : No Collision Detection between Sprites.

ios - SpriteKit + Swift 中的多点触控手势识别

swift - 如何设置 SKLabelNode 的对齐方式

java - 为什么我的项目在 android 上运行,但在 codenameone 中不能在 ios 上运行?

ios - 如何在 UITableView 中只显示数据源的一个子集?

ios - 如何在 Spritekit 中设置球的随机位置?

ios - 错误 : ld: library not found for -lPods with CocoaPods

swift - 如何仅在 Swift 中将一个 View Controller 的方向锁定为纵向模式

ios - 我们可以在不设置 "occupantIDs” 的情况下创建 1-1 chatDialog 吗? (快布乐)