在開發過程中,我們有時會希望把一些操作封裝起來延遲一段時間后再執行。iOS開發中,有兩種常用的方法可以實現延遲執行,一種是使用GCD,另外一種是使用NSRunLoop類中提供的方法。
1、使用GCD實現延遲執行
在GCD中可以使用dispatch_after()函數,封裝一段代碼到block中,在設置的延遲時間(dispatch_time_t)之后執行。
- void dispatch_after( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block);
如下所示:在2.0秒后,輸出一段日志。在該方法中,延遲執行的代碼在主隊列中執行,我們也可以修改執行的隊列。
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- NSLog(@"延遲2.0秒后打印出來的日志!");
- });
2、使用NSRunLoop類中的方法實現延遲執行
在NSRunLoop類中,也提供了有關延遲執行的方法。由於這些方法是對NSObject類的擴展,因此,所有的類都可以使用。
- @interface NSObject (NSDelayedPerforming)
- - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
- - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
- @end
下面的代碼中也實現了延遲2秒打印一段日志的操作。
- - (void)viewDidLoad {
- [super viewDidLoad];
- //延遲2秒執行printLog
- [self performSelector:@selector(printLog) withObject:nil afterDelay:2.0];
- }
- -(void) printLog{
- NSLog(@"延遲2.0秒后打印出來的日志!");
- }