创建一个定时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(forTimer) userInfo:nil repeats:YES];
也可以直接
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(forTimer) userInfo:nil repeats:YES];
但这样无法对定时器进行操作
其中 1 为定时器回调方法的执行间隔,在定时器开启时,会先执行一个间隔,在进行第一次方法的回调;slelct:回调函数 repeats:是否重复执行,NO的情况下定时器只执行一次,userinfo:用于定时器传参
关于定时器的停止与开启,两种方式
[timer setFireDate:[NSDate distantFuture]];//定时器暂停
[timer setFireDate:[NSDate distantPast]];//定时器开始
这种方式需要注意的是,关闭定时器实际上是让回调函数的执行时间变成无限远,无法回调导致定时器停止,开启定时器是让回调函数无限近,从而让定时器开始所以这种方式必不会销毁定时器,而且,使用这种方式开始定时器会立刻回调一次回调函数
[timer invalidate];
timer = nil;
相对于上一种方法,这种方式会销毁定时器,如果想再次开启定时器必须重新创建,注意只执行 [timer invalidate] 并不会销毁定时器,timer = nil;后才真正销毁了定时器
关于在userInfo中传递参数
创建一个label
UILabel *label = [[UILabel alloc]init];
label.text = @"this is a label";
label填到userInfo上
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(forTimer:) userInfo:label repeats:YES];
//回调方法
-(void)forTimer:(NSTimer *)timer
{
//获取传递的label
UILabel *label = timer.userInfo;
//输出label.text
NSLog(@"--------%@---------",label.text);
}