GCD 开启一个定时器实现倒计时功能
1 UIAlertView * alt = [[UIAlertView alloc] initWithTitle:@"提示" 2 message:@"操作成功,马上返回继续体验吧" 3 delegate:self 4 cancelButtonTitle:@"留在当前" 5 otherButtonTitles:@"马上返回", nil]; 6 [alt show]; 7 //倒计时时间 8 __block int timeout = 5; 9 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 10 dispatch_source_t source_t= dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue); 11 //每秒执行 12 dispatch_source_set_timer(source_t,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); 13 dispatch_source_set_event_handler(source_t, ^ 14 { 15 if(timeout<=0) 16 { 17 //倒计时结束,关闭 18 NSString *strTime = [NSString stringWithFormat:@"倒计时,%.2ds后返回", 0]; 19 dispatch_async(dispatch_get_main_queue(), ^ 20 { 21 //设置界面的按钮显示 根据自己需求设置 22 alt.message = strTime; 23 [alt dismissWithClickedButtonIndex:1 animated:YES]; // 模拟的没有调用delegate方法 24 dispatch_source_cancel(source_t); 25 }); 26 } 27 else 28 { 29 // int minutes = timeout / 60; //分 30 int seconds = timeout % 60; //秒 31 NSString *strTime = [NSString stringWithFormat:@"倒计时,%.2ds后返回", seconds]; 32 dispatch_async(dispatch_get_main_queue(), ^ 33 { 34 //设置界面的按钮显示 根据自己需求设置 35 alt.message = strTime; 36 }); 37 timeout--; 38 } 39 }); 40 dispatch_resume(source_t);
最后,奉上一篇博文 http://blog.csdn.net/chumeng411/article/details/20918895 这一篇博文中简单论述了timer与线程的关系可以参考一下。