【问题标题】:How freeing memory during viewController transition在 viewController 转换期间如何释放内存
【发布时间】:2015-01-31 07:06:41
【问题描述】:

我解释我的问题。

我刚刚制作了一个有 3 个视图的游戏。

  1. 带有播放按钮的游戏演示
  2. 游戏场景
  3. 游戏结束场景带有一个按钮可再次播放或返回演示场景。

我的问题是当两个场景之间有过渡时,活动内存会多出 30MB,每个场景过渡都会增加大约 30MB 的活动内存,并且永远不会减少。

如何修复它并释放内存?

谢谢大家

我的转换代码:

// Transition in presentationViewController file
func transition(sender:UIButton!)
{

    println("transition")
    let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("GameViewController") as UIViewController

    let window = UIApplication.sharedApplication().windows[0] as UIWindow
    UIView.transitionFromView(
        window.rootViewController!.view,
        toView: secondViewController.view,
        duration: 0.65,
        options: .TransitionCrossDissolve,
        completion: {
            finished in window.rootViewController = secondViewController
    })
}


// transition in GameScene file

func removeCountDownTimerView()
{

    defaults.setInteger(balloonDestroyed, forKey: "score")
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let gameOverScene: UIViewController = storyboard.instantiateViewControllerWithIdentifier("GameOverViewController") as UIViewController
    let vc = self.view?.window?.rootViewController
    vc?.presentViewController(gameOverScene, animated: true, completion: nil)


}

// transition in gameOverViewController file

func transition(sender:UIButton!)
{
    println("play transition")
    let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("GameViewController") as UIViewController


    let window = UIApplication.sharedApplication().windows[0] as UIWindow
    UIView.transitionFromView(
        window.rootViewController!.view,
        toView: secondViewController.view,
        duration: 0.65,
        options: .TransitionCrossDissolve,
        completion: {
            finished in window.rootViewController = secondViewController
    })
}

【问题讨论】:

    标签: ios iphone memory swift sprite-kit


    【解决方案1】:
    instantiateViewControllerWithIdentifier("GameViewController") as UIViewController
    

    每次用户按下按钮时,此代码都会创建新的 ViewController。我建议您为此使用单音模式。

    private let _SomeManagerSharedInstance = GameViewController() 
    class GameOverViewController {
    class var sharedInstance: GameOverViewController {
           return _GameOverViewController
    }
    

    您还可以创建一个私有类方法来从情节提要中实例化视图控制器。

    【讨论】:

    • 感谢您的回答,但我是一名新程序员(这是我的第一个应用程序),我在哪里添加您的代码?你能解释一下吗?
    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2018-09-25
    • 2017-04-22
    相关资源
    最近更新 更多