解决方法
除非您特别需要计时器,否则您可以使用Grand Central dispatch.
以下代码段将在默认优先级并发队列(即后台线程)上2秒后执行一个块.如果您认为合适,可以更改队列的优先级,但除非您在并发队列上处理大量不同的操作,否则默认就足够了.
double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(disPATCH_TIME_Now,(int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime,dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAULT,0),^(void){ // Your code here });
如果您想重复调用它,则可以使用dispatch_source_set_timer设置重复执行.它的主旨如下:
// Create a dispatch source that'll act as a timer on the concurrent queue // You'll need to store this somewhere so you can suspend and remove it later on dispatch_source_t dispatchSource = dispatch_source_create(disPATCH_SOURCE_TYPE_TIMER,0)); // Setup params for creation of a recurring timer double interval = 2.0; dispatch_time_t startTime = dispatch_time(disPATCH_TIME_Now,0); uint64_t intervalTime = (int64_t)(interval * NSEC_PER_SEC); dispatch_source_set_timer(dispatchSource,startTime,intervalTime,0); // Attach the block you want to run on the timer fire dispatch_source_set_event_handler(dispatchSource,^{ // Your code here }); // Start the timer dispatch_resume(dispatchSource); // ---- // When you want to stop the timer,you need to suspend the source dispatch_suspend(dispatchSource); // If on iOS5 and/or using MRC,you'll need to release the source too dispatch_release(dispatchSource);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。