[問題] Swift的selector遇到奇怪的bug

作者: fishead1116 (DD魚)   2015-03-12 14:34:36
範例:http://ppt.cc/fIRF
override func viewDidLoad(){
var timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self,
selector:"initFoo",userInfo : nil,repeats: false)
}
func initFoo(){
println("initFoo")
}
這段程式執行的時候會導致ViewController Crash掉...
但是如果直接在viewDidLoad裡面執行initFoo()就正常
如果selector 和func 都改成initfoo (全小寫)也是正常
不太確定為啥會有這種BUG ,以後還是別拿保留字當函式名稱一部分了..
PS 用的是XCode 6.1
作者: ckvir (ckvir)   2015-03-12 14:53:00
如果改成 selector:Selector("initFoo") 呢?或試試 selector:"initFoo" 不加括弧以及加上 @objc func initFoo {... 試試看有 Crash 的訊息嗎?
作者: uranusjr (←這人是超級笨蛋)   2015-03-12 15:42:00
看起來是你自己被 dealloc 了, 不是 selector 的問題請提供更多資訊以及能實際重現問題的範例
作者: darktt (小朱)   2015-03-12 16:51:00
你的timer被ralease了,建議採用property保持timer的reference
作者: ckvir (ckvir)   2015-03-12 17:13:00
Swift 有一些情況是不會自動 dealloc 的,所以會造成 memory leak
作者: johnlinvc (阿翔)   2015-03-13 18:12:00
不知道為何你的ViewContorler會被releasehacky的解法是在AppDelegate裡面開一個var 指向他這樣可以不會當...但是root Cause 未知
作者: ckvir (ckvir)   2015-03-13 20:33:00
還真的滿奇怪的,我也想知道解答

Links booklink

Contact Us: admin [ a t ] ucptt.com