? ? ? ?看到這個標題培遵,可能會罵我,怎么會失效登刺,代碼寫得有問題吧籽腕,其實還真是有問題。
? ? ? ?我先說一下場景纸俭,xcode新建mac工程皇耗,注意是mac工程,然后4中方式設置定時器揍很,定時周期是 1.0/60 s郎楼,出現(xiàn)的結果就是,執(zhí)行一段時間(幾分鐘不等)之后窒悔,定時器停止計時呜袁,這個停止的時間也不等,幾秒到十幾秒都有可能简珠。我直接上代碼吧.
1.GCD 異步線程傅寡,子線程里加定時器。
2.第二種,thread創(chuàng)建線程荐操,子線程中添加timer
3.GCD sourceTimer的方式芜抒,定時,這里我用了自己的封裝
4.主線程直接添加timer托启,這里就不復制代碼了宅倒,太簡單了
下面我們看執(zhí)行的事件,很簡單屯耸,就是打印計時器兩次工作的時間差
如果這個時間差拐迁,大于5秒,我給了個打印疗绣,說明已經(jīng)5秒沒有調用了线召,也就是定時器停止了5秒。
下面貼上結果
這是開始執(zhí)行的時間多矮,14:04:25秒
這是出問題的時間14:05:33秒缓淹、14:05:44秒
后面還會陸陸續(xù)續(xù)的出問題。
檢查了代碼塔逃,沒有問題讯壶,而且,我什么都沒做湾盗,沒有處理數(shù)據(jù)伏蚊,沒有刷新界面。所以我也無能為力了
神奇的是格粪,同樣的代碼躏吊,我放在iPhone工程里面執(zhí)行,沒有問題帐萎,而且是放在主線程都沒有問題颜阐。
我只是暴露問題,就希望做mac開發(fā)的童鞋們吓肋,遇到定時器的時候凳怨,注意下這個天坑。
這是時間設置的很短的時候是鬼,如果設置成1秒或者幾秒,也會出問題
至于這個是單純的定時器暫停還是會阻塞線程肤舞,沒測到,我在主線程添加的定時器均蜜,然后界面上放一個button李剖,不停的打印,看到打印停止了囤耳,馬上點擊button篙顺,看會不會有響應偶芍。
但是很神奇的是,加了button之后德玫,發(fā)生的時間延長了匪蟀,概率也大大降低了。很奇怪宰僧,也沒有點擊到材彪。
我再次去掉button,出現(xiàn)概率提高了琴儿,出現(xiàn)之后我點擊了屏幕里任何的地方段化,計時器馬上開始工作。
這是不是mac系統(tǒng)對timer做的一種優(yōu)化造成,就不清楚了显熏,不敢忘記猜測,希望對遇到同樣的問題的童鞋有幫助.