温馨提示×

iOS定时器-- NSTimer&GCD定时器

iOS
小云
145
2023-09-21 10:23:01
栏目: 编程语言

在iOS中,我们可以使用NSTimer或者GCD来实现定时器功能。

  1. NSTimer:

NSTimer是Foundation框架中的一个类,可以用来创建定时器。它的使用相对简单,可以通过指定时间间隔和重复次数来创建一个定时器,并且可以指定定时器触发后要执行的方法。

例如,我们可以使用NSTimer来创建一个每隔1秒执行一次的定时器:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

上述代码中,scheduledTimerWithTimeInterval方法用来创建一个定时器,第一个参数指定了时间间隔,第二个参数是指定定时器触发后要调用的方法,第三个参数可以传递一些附加信息给定时器的回调方法,最后一个参数repeats指定了定时器是否重复执行。

  1. GCD定时器:

GCD(Grand Central Dispatch)是苹果提供的一种多核编程的解决方案,可以用来创建定时器。GCD的定时器相对于NSTimer更加灵活,可以在主线程或者后台线程中执行任务,并且可以通过设置dispatch_source_set_timer的参数来实现不同的定时器行为(比如只执行一次或者重复执行)。

例如,我们可以使用GCD来创建一个每隔1秒执行一次的定时器:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
// 定时器触发后要执行的任务
});
dispatch_resume(timer);

上述代码中,我们先创建了一个GCD定时器,然后使用dispatch_source_set_timer方法设置了定时器的参数,其中第一个参数指定了定时器的类型为DISPATCH_SOURCE_TYPE_TIMER,第二个参数是一个时间参数,指定了定时器第一次触发的时间,第三个参数是时间间隔,指定了定时器触发的间隔时间,最后一个参数指定了定时器的精度。最后,我们通过dispatch_source_set_event_handler方法设置了定时器触发后要执行的任务,并通过dispatch_resume方法启动了定时器。

需要注意的是,在使用NSTimer或GCD定时器时,如果在需要执行的任务中需要更新UI,需要在主线程中执行更新操作。

0