ios開發--GCD使用介紹:4-延遲執行操作


在開發過程中,我們有時會希望把一些操作封裝起來延遲一段時間后再執行。iOS開發中,有兩種常用的方法可以實現延遲執行,一種是使用GCD,另外一種是使用NSRunLoop類中提供的方法。

1、使用GCD實現延遲執行

在GCD中可以使用dispatch_after()函數,封裝一段代碼到block中,在設置的延遲時間(dispatch_time_t)之后執行。

  1. void dispatch_after( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block);

如下所示:在2.0秒后,輸出一段日志。在該方法中,延遲執行的代碼在主隊列中執行,我們也可以修改執行的隊列。

  1. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  2. NSLog(@"延遲2.0秒后打印出來的日志!");
  3. });

2、使用NSRunLoop類中的方法實現延遲執行

在NSRunLoop類中,也提供了有關延遲執行的方法。由於這些方法是對NSObject類的擴展,因此,所有的類都可以使用。

  1. @interface NSObject (NSDelayedPerforming)
  2.  
  3. - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
  4. - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
  5.  
  6. @end

下面的代碼中也實現了延遲2秒打印一段日志的操作。

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3.  
  4. //延遲2秒執行printLog
  5. [self performSelector:@selector(printLog) withObject:nil afterDelay:2.0];
  6. }
  7.  
  8. -(void) printLog{
  9. NSLog(@"延遲2.0秒后打印出來的日志!");
  10. }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM