NSTimer 基礎(chǔ)請(qǐng)參考:
NSTimer的使用以及 史上最簡單的张遭,NSTimer暫停和繼續(xù)?
Firing a Timer
You can use this method to fire a repeating timer without interrupting its regular firing schedule. If the timer is non-repeating, it is automatically invalidated after firing, even if its scheduled fire date has not arrived.
也就是說:fire一個(gè)timer邓萨,如果這個(gè)timer是repeat,則會(huì)立刻觸發(fā)一次菊卷,但是并不會(huì)影響后面的觸發(fā)時(shí)間間隔缔恳;如果這個(gè)timer不是repeat,那么這一次觸發(fā)之后洁闰,后面就不會(huì)觸發(fā)了歉甚。總而言之扑眉,fire是提前觸發(fā)一個(gè)timer(就是在fire那一刻觸發(fā)一次)纸泄,但是不會(huì)影響其他的時(shí)間間隔等。
關(guān)于對(duì)象release和對(duì)象=nil的區(qū)別
網(wǎng)上也有很多討論腰素,我也實(shí)際驗(yàn)證了一下聘裁,個(gè)人認(rèn)為??[對(duì)象 release] 后 這個(gè)對(duì)象就沒有指向任何內(nèi)存空間了,這個(gè)時(shí)候弓千,它是不能被使用的(可以試試??NSLog 一下??release 后的對(duì)象衡便,有驚喜的。洋访。镣陕。)
當(dāng)對(duì)象 = nil 時(shí),這個(gè)對(duì)象是指向了一個(gè)內(nèi)存空間的( 0x0000姻政,即開始地址)呆抑,這個(gè)時(shí)候這個(gè)對(duì)象是可以被NSLog出來的。汁展。鹊碍。。食绿。
如果一個(gè)對(duì)象alloc 一次并release后妹萨,以后是不能再使用的,它雖然也指向原來的內(nèi)存空間炫欺,但其內(nèi)容是不確定的乎完,使用的話,它的內(nèi)容有時(shí)候沒事品洛,但有時(shí)候會(huì)崩潰的树姨。
timer都會(huì)對(duì)它的target進(jìn)行retain摩桶,我們需要小心對(duì)待這個(gè)target的生命周期問題,尤其是重復(fù)性的timer
timer不是一種實(shí)時(shí)的機(jī)制帽揪,會(huì)存在延遲硝清,而且延遲的程度跟當(dāng)前線程的執(zhí)行情況有關(guān)
觀察結(jié)果我們可以發(fā)現(xiàn),當(dāng)線程空閑的時(shí)候timer的消息觸發(fā)還是比較準(zhǔn)確的转晰,但是在36分12秒開始線程一直忙著做大量運(yùn)算芦拿,知道36分14秒該運(yùn)算才結(jié)束,這個(gè)時(shí)候timer才觸發(fā)消息查邢,這個(gè)線程繁忙的過程超過了一個(gè)周期蔗崎,但是timer并沒有連著觸發(fā)兩次消息,而只是觸發(fā)了一次扰藕。等線程忙完以后后面的消息觸發(fā)的時(shí)間仍然都是整數(shù)倍與開始我們指定的時(shí)間缓苛,這也從側(cè)面證明,timer并不會(huì)因?yàn)橛|發(fā)延遲而導(dǎo)致后面的觸發(fā)時(shí)間發(fā)生延遲邓深。