[英]My Swift code is not calling deinit because of a closure strong reference or NSTimer. How can I solve it?
override func viewDidLoad() {
super.viewDidLoad()
fadeBackground()
NSTimer.scheduledTimerWithTimeInterval(self.fadeTime, target: self, selector: Selector("fadeBackground"), userInfo: nil, repeats: true)
}
func fadeBackground(){
var spiralView: UIImageView?
var subviews = self.view.subviews
for v in subviews{
if v.isKindOfClass(UIImageView){
spiralView = v as? UIImageView
}
}
UIView.animateWithDuration(self.fadeTime, delay: 0, options: UIViewAnimationOptions.AllowUserInteraction, animations: { [unowned self] () -> Void in
var randomIndex = Int(arc4random_uniform(UInt32(CONSTANTS.MainColorScheme.count)))
var randomIndex2 = Int(arc4random_uniform(UInt32(CONSTANTS.MainColorScheme.count)))
self.view.backgroundColor = CONSTANTS.MainColorScheme[randomIndex]
if spiralView != nil {
spiralView!.tintColor = CONSTANTS.MainColorScheme[randomIndex2]
}
}) { (stuff Bool) -> Void in
}
}
如您所見,我已經在閉包中擁有[unowned self]
。 我不確定為什么這個視圖控制器仍然沒有調用deinit()。 我猜那里仍然有內存泄漏?
我需要在viewDidDisappear上停止計時器嗎? 我怎么做?
解決了我的問題。
我必須使viewWillDisappear上的計時器無效。
var fader: NSTimer?
override func viewWillDisappear(animated: Bool) {
println("lobby viewWillDisappear")
super.viewWillDisappear(animated)
self.fader!.invalidate()
self.fader = nil
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.