随着ViewController在Swift中的变化,内存也随之增加

时间:2015-01-12 03:10:02

标签: swift uiviewcontroller ios8

我正在制作一本使用故事板的互动儿童书,为我的书中的每一页布置12页。但是,每次我切换视图控制器去另一个故事板时,我的内存每次增加几乎两倍。我一直收到内存警告和崩溃,在调试导航器中,我看到内存从~36跳到~54到~95直到达到200以上。

我尝试过使用segue过渡和程序化过渡,如下所示:

class page01VC:UIViewController {

@IBOutlet var kid: UIImageView!
let kidStanding = UIImage(named: "01_boyStanding")
let kidJumping = UIImage(named: "01_boyJumping")
var kidJump:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
var boyCounter: CGFloat = 0.0
var boyJumpTimer:NSTimer!

@IBOutlet var snowflakes: UIImageView!
let flakes = UIImage(named: "01_flakes")
var flakeTimer:NSTimer!

override func loadView() {

    super.loadView()

    flakeTimer = NSTimer.scheduledTimerWithTimeInterval(0.008, target: self, selector: Selector("moveSnow"), userInfo: nil, repeats: true)
    //NSRunLoop.currentRunLoop().addTimer(flakeTimer, forMode: NSRunLoopCommonModes)

    kidJump.frame = CGRectMake(140, 250, 338, 478)
    kidJump.addTarget(self, action: "kidJumpTimer:", forControlEvents: UIControlEvents.TouchDown)

    self.view.insertSubview(kidJump, aboveSubview:kid)

}

//Other functions I have made would be here
}

有谁知道如何防止这种记忆积聚?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您是否在viewDidDisappear删除了对计时器的引用?在viewWillAppear中启动您的计时器,然后在viewDidDisappear中删除它们。我认为即使在视图不可见之后,计时器仍然存在。

请参阅NSTimer documentation专门“在运行循环中安排计时器”(该部分的底部段落)和invalidate方法。

另请参阅适用于iOS的App编程指南中的Performance Tips和适用于iOS的View Controller编程指南中的Resource Management in View Controllers