SLDelayPerform.m 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. //
  2. // SLDelayPerform.m
  3. // DarkMode
  4. //
  5. // Created by wsl on 2019/11/28.
  6. // Copyright © 2019 https://github.com/wsl2ls ----- . All rights reserved.
  7. //
  8. #import "SLDelayPerform.h"
  9. //延迟执行的回调 静态全局变量
  10. static dispatch_block_t sl_delayBlock;
  11. @implementation SLDelayPerform
  12. /// 开始延迟执行 每次调用就重新开始计时 用完记得 执行sl_cancelDelayPerform
  13. /// @param perform 执行内容
  14. /// @param delay 延迟时间
  15. + (void)sl_startDelayPerform:(void(^)(void))perform afterDelay:(NSTimeInterval)delay {
  16. if (sl_delayBlock != nil) {
  17. dispatch_block_cancel(sl_delayBlock);
  18. sl_delayBlock = nil;
  19. }
  20. if (sl_delayBlock == nil) {
  21. sl_delayBlock = dispatch_block_create(DISPATCH_BLOCK_BARRIER, ^{
  22. perform();
  23. });
  24. }
  25. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(),sl_delayBlock);
  26. }
  27. ///取消延迟执行
  28. + (void)sl_cancelDelayPerform {
  29. if (sl_delayBlock != nil) {
  30. dispatch_block_cancel(sl_delayBlock);
  31. sl_delayBlock = nil;
  32. }
  33. }
  34. @end