星空网 > 软件开发 > 操作系统

performSelector withObject afterDelay 在子线程上调用不运行

如题,这是最近在修改一个数据同步模块时发现的问题。整个数据同步的任务是在App启动后放在一个后台执行的线程中的,执行某个单条数据同步任务成功后,会使用

Objective-c代码  performSelector withObject afterDelay 在子线程上调用不运行images/loading.gif' data-original="http://grayheart.iteye.com/images/icon_star.png" />

  1. [self performSelector:(nonnull SEL) withObject:(nullable id) afterDelay:(NSTimeInterval)];  

 来执行下一个单条数据同步任务。通过调试,发现在执行到这行代码的时候,并没有调用 SEL 的方法。在确定存在这个方法后,一直没有想到原因,于是就谷歌之。答案就是,performSelector withObject afterDelay 方法在子线程中,并不会调用SEL方法,而 performSelector withObject 方**直接调用。原因在于一下两点:

1、afterDelay方式是使用当前线程的定时器在一定时间后调用SEL,NO AfterDelay方式是直接调用SEL。
2、子线程中默认是没有定时器的。

 

所以,针对问题的解决方法也有两种:

1、开启线程的定时器

Objective-c代码  performSelector withObject afterDelay 在子线程上调用不运行

  1. [[NSRunLoop currentRunLoop] run];  

 

2、使用dispatch_after来执行定时任务

 

Objective-c代码  performSelector withObject afterDelay 在子线程上调用不运行

    1. - (void)functionToDelay:(SEL)function param:(nullable id)param afterDelay:(NSTimeInterval)delay {  
    2.     dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, delay*NSEC_PER_SEC);  
    3.     dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
    4.         if ([self respondsToSelector:function]) {  
    5. #pragma clang diagnostic push  
    6. #pragma clang diagnostic ignored "-Warc-performSelector-leaks"  
    7.         [self performSelector:function withObject:param];  
    8. #pragma clang diagnostic pop  
    9.   
    10.         }  
    11.     });     
    12. }  

QQ技术交流群290551701  http://cxy.liuzhihengseo.com/556.html





原标题:performSelector withObject afterDelay 在子线程上调用不运行

关键词:线程

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

tiktok搬运到国内:https://www.goluckyvip.com/tag/83855.html
tiktok……:https://www.goluckyvip.com/tag/83856.html
tiktok抽帧:https://www.goluckyvip.com/tag/83857.html
tiktok定邀:https://www.goluckyvip.com/tag/83858.html
玩赚tiktok:https://www.goluckyvip.com/tag/83859.html
tiktok冲粉:https://www.goluckyvip.com/tag/83860.html
恐怖游轮2002 恐怖游轮2022:https://www.vstour.cn/a/365178.html
时尚电商平台Meesho拟融资3亿美元!:https://www.kjdsnews.com/a/1836524.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流