作者fishead1116 (DD魚)
看板MacDev
標題[閒聊] Swift的selector遇到奇怪的bug
時間Thu Mar 12 14:34:36 2015
範例:
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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.221.141
※ 文章網址: https://webptt.com/m.aspx?n=bbs/MacDev/M.1426142080.A.A1F.html
1F:推 ckvir: 如果改成 selector:Selector("initFoo") 呢? 03/12 14:53
2F:推 ckvir: 或試試 selector:"initFoo" 不加括弧 03/12 14:56
3F:推 ckvir: 以及加上 @objc func initFoo {... 試試看 03/12 15:00
剛才試了一下 有沒有加Selector() 和有沒有@objc一共4種組合都會Crash
※ 編輯: fishead1116 (211.21.229.247), 03/12/2015 15:09:12
4F:推 ckvir: 有 Crash 的訊息嗎? 03/12 15:18
在Appdelegate出現
Thread 1: EXC_BAD_ACCESS(code=1
把enable zombie object 選項打開會出現
[(Project名稱).ViewController retain]: message sent to deallocated instance
※ 編輯: fishead1116 (211.21.229.247), 03/12/2015 15:25:32
5F:→ uranusjr: 看起來是你自己被 dealloc 了, 不是 selector 的問題 03/12 15:42
6F:→ uranusjr: 請提供更多資訊以及能實際重現問題的範例 03/12 15:42
你這麼一說我才發現如果開空Project的話無法重現= =""
我已經把viewDidLoad砍到剩那一行還是有問題,
class裡有幾個用storyboard拉的UILabel,UIButton,UIImageView
class有實作CBCentralManagerDelegate,CBPeripheralDelegate
不過那幾個方法完全沒使用到
※ 編輯: fishead1116 (211.21.229.247), 03/12/2015 16:00:37
BTW 同一個.swift檔案還有一個enum和一個struct
是說,Swift不是自動會dealloc的嗎?
※ 編輯: fishead1116 (211.21.229.247), 03/12/2015 16:03:10
7F:→ darktt: 你的timer被ralease了,建議採用property保持timer的 03/12 16:51
8F:→ darktt: reference 03/12 16:51
還是一樣耶,我上傳我的範例
http://ppt.cc/fIRF
我是用模擬器iOS7.1 和iOS8.1 iPhone 5S 和iPhone 6跑的
※ 編輯: fishead1116 (211.21.229.247), 03/12/2015 17:02:11
9F:推 ckvir: Swift 有一些情況是不會自動 dealloc 的,所以會造成 memor 03/12 17:13
10F:→ ckvir: y leak 03/12 17:13
※ 編輯: fishead1116 (118.163.221.141), 03/12/2015 17:24:53
11F:推 johnlinvc: 不知道為何你的ViewContorler會被release 03/13 18:12
12F:→ johnlinvc: hacky的解法是在AppDelegate裡面開一個var 指向他 03/13 18:13
13F:→ johnlinvc: 這樣可以不會當...但是root Cause 未知 03/13 18:14
其實只要不要用init開頭就沒有問題 可能跟ViewController的某些方法相衝到了吧
14F:推 ckvir: 還真的滿奇怪的,我也想知道解答 03/13 20:33
※ 編輯: fishead1116 (118.171.154.94), 03/13/2015 22:41:22