作者:fengsh998
原文地址:http://blog.csdn.net/fengsh998/article/details/35842441
轉(zhuǎn)載請(qǐng)注明出處
如果覺(jué)得文章對(duì)你有所幫助东帅,請(qǐng)通過(guò)留言或關(guān)注微信公眾帳號(hào)fengsh998來(lái)支持我摄杂,謝謝!
在OC中使用好好的performSelector蜘渣,但不知為什么在swift有意的被拿掉了或辖。更有甚者連IMP, objc_msgSend也不能用了。雖然想不通為什么到腥,但應(yīng)該有他的道理雁比。就不糾結(jié)了。
大家可能在OC中使用得更多的就是延時(shí)處理侧蘸,及后臺(tái)處理裁眯,或線程異步等。現(xiàn)在沒(méi)有performSelector闺魏,哪在swift還有什么可以代替呢未状,當(dāng)然有了,如GCD,NSTimer其實(shí)都可以近似的代替析桥。
如:NSTimer
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
let tm = NSTimer(timeInterval: 3.0, target: self, selector: "selectorfunc:", userInfo: nil, repeats: false)
tm.fire()
但個(gè)人感覺(jué)使NSTimer有個(gè)傳上下文時(shí)獲取與performSelector不一樣司草。從上下文中拿到的是NSTimer需要再取userInfo才可以。但不管怎么樣泡仗,可以實(shí)現(xiàn)延時(shí)處理埋虹。
另外,我還自己做了一個(gè)swift 的擴(kuò)展類(OC的catagray) 同樣偽裝了一個(gè)performselector方法娩怎。為什么講是偽裝搔课,因?yàn)檫^(guò)程中在調(diào)用最終的selector時(shí),用了線程處理截亦。而不是理想的msgSend的方式(swift沒(méi)有開源爬泥,沒(méi)法看到實(shí)現(xiàn),又不提供IMP,查了好多資料都沒(méi)有講執(zhí)行Selector 的崩瓤,如有大神發(fā)現(xiàn)袍啡,請(qǐng)告訴我。却桶。境输。)
實(shí)現(xiàn):