在iOS开发中有三种方式创建定时器
1,第一种
scheduledTimerWithTimeInterval:invocation:repeats:
或者scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
这两个类方法创建一个timer并把它指定到一个默认的runloop模式中,所以这种方式不需要我们手动添加到系统的runloop中
2,第二种
timerWithTimeInterval:invocation:repeats:
或者timerWithTimeInterval:target:selector:userInfo:repeats:
这两个类方法创建一个timer的对象,但并不会自动添加到系统run loop中 (你必须手动的调用NSRunLoop下对应的方法 addTimer:forMode:
去将它添加到一个runloop模式中.)
3,第三种
initWithFireDate:interval:target:selector:userInfo:repeats:
方法分配并创建一个NSTimer的实例 (当创建之后,你必须手动的调用NSRunLoop下对应的方法addTimer:forMode:
去将它制定到一个runloop模式中.)
[timer fire];// 可以通过fire这个方法去触发timer,即使timer的firing time没有到达
NSTimer
停止 [time setFireDate:[NSDate distantFunture]]
启动 [time setFireDate:[NSDate distanPast]]
继续[timer setFireDate:[NSDate date]]
关于内存问题:
如果我们启动了一个定时器,在某个界面释放前,将这个定时器停止,甚至置为nil,都不能是这个界面释放,原因是系统的循环池中还保有这个对象。所以我们需要加上下面的代码:
[timer invalidate];
}
timer=nil;
注:以下是对上面方法参数解释:
1、参数repeats是指定是否循环执行,YES将循环,NO将只执行一次。
2、timerWithTimeInterval这两个类方法创建出来的对象如果不用 addTimer: forMode方法手动加入主循环池中,将不会循环执行。并且如 果不手动调用fair,则定时器不会启动。
3、scheduledTimerWithTimeInterval这两个方法不需要手动调用fair, 会自动执行,并且自动加入主循环池。
4、init方法需要手动加入循环池,它会在设定的启动时间启动。
关于定时器的文章链接
http://www.cnblogs.com/ygm900/p/3946776.html
网友评论