[问题] 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