iOS中NSTimer的使用

我们在开发的过程中,可能会用到计时器,Foundation框架中有个类叫做NSTimer。我们可以指定绝对的日期与时间,也可以指定执行任务的相对延迟时间,还可以重复运行任务,下面我们来看一下NSTimer的使用。

计时器要和“运行循环”相关联,运行循环到时候会触发任务。创建NSTimer时,可以将其“预先安排”在当前的运行循环中,也可以先创建好,然后由开发者自己来调度。不管何种方式,只有把计时器放在运行循环里,计时器才能正常触发任务。

代码如下,计时器的初始化

情况一:

NSTimer *timer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(printName) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

情况二:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(printName) userInfo:nil repeats:YES];
第一种初始化方法,没有scheduled,所以必须手动addTimer:,将timer添加到runloop中;第二种有scheduled的初始化方法,将以默认的mode将timer添加到当前的runloop中。

如果不想在当前的runloop中,执行timer方法,可以自己新建一个runloop。

NSRunLoop *loop = [NSRunLoop currentRunLoop];
[loop run];

计时器的停止

只有一种方法可以将timer移除runloop。

[timer invalidate];
因为计时器NSTimer会保留目标对象,等到自身失效时再释放此对象。调用invalidate方法可令计时器失效;执行完相关任务后,一次性的计时器也会失效。如果将计时器设置成重复执行模式,那么必须自己手动调用invalidate方法,才能令其停止。

由于计时器会保留其目标对象,所以反复执行任务通常会导致程序出问题。也就是说,设置成重复执行模式的那种计时器,容易形成“引用循环”。所以这种情况下,一定要记得调用终止计时器的invalidate方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值