// 延迟执行不要用sleep,坏处:卡住当前线程
[NSThread sleepForTimeInterval:(NSTimeInterval)];
// 一旦定制好延迟任务后,不会卡主当前线程
[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>];
//n秒后回到主线程执行block中的代码
dispatch_queue_t queue = dispatch_get_main_queue();
//n秒后自动开启新线程 执行block中的代码
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(n * NSEC_PER_SEC)), queue, ^{
// n秒后需要执行的任务
});