NSTimer 基础请参考:
NSTimer的使用以及 史上最简单的,NSTimer暂停和继续
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一个timer,如果这个timer是repeat,则会立刻触发一次,但是并不会影响后面的触发时间间隔;如果这个timer不是repeat,那么这一次触发之后,后面就不会触发了。总而言之,fire是提前触发一个timer(就是在fire那一刻触发一次),但是不会影响其他的时间间隔等。
关于对象release和对象=nil的区别
网上也有很多讨论,我也实际验证了一下,个人认为 [对象 release] 后 这个对象就没有指向任何内存空间了,这个时候,它是不能被使用的(可以试试 NSLog 一下 release 后的对象,有惊喜的。。。)
当对象 = nil 时,这个对象是指向了一个内存空间的( 0x0000,即开始地址),这个时候这个对象是可以被NSLog出来的。。。。。
如果一个对象alloc 一次并release后,以后是不能再使用的,它虽然也指向原来的内存空间,但其内容是不确定的,使用的话,它的内容有时候没事,但有时候会崩溃的。
timer都会对它的target进行retain,我们需要小心对待这个target的生命周期问题,尤其是重复性的timer
timer不是一种实时的机制,会存在延迟,而且延迟的程度跟当前线程的执行情况有关
观察结果我们可以发现,当线程空闲的时候timer的消息触发还是比较准确的,但是在36分12秒开始线程一直忙着做大量运算,知道36分14秒该运算才结束,这个时候timer才触发消息,这个线程繁忙的过程超过了一个周期,但是timer并没有连着触发两次消息,而只是触发了一次。等线程忙完以后后面的消息触发的时间仍然都是整数倍与开始我们指定的时间,这也从侧面证明,timer并不会因为触发延迟而导致后面的触发时间发生延迟。