作者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/cn.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