多线程定时器(循环请求)

小伙伴在开发过程中,一定遇到过这样的需求,需要定时请求某个接口,获取数据,为了界面的流畅和代码的简洁,就会用上多线程。
那一定遇到过这样的bug,push到下一个界面了,定时器还是没有停止,dealloc的方法没有走,pod到上一界面,走了dealloc,定时器不会停止,而且说不定什么时候 程序就闪退了。
于是我在viewWillDisappear的方法里也进行定时器的释放,这样好了。不多说了,上代码吧。


// Block弱引用
#define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self;
@interface DemoController 

{
// 
    dispatch_source_t _dataTimer;//定时器
}
@end


-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if (_dataTimer) {
        dispatch_cancel(_dataTimer);
        _dataTimer = nil;
    }
}
-(void)dealloc
{
    if (_dataTimer) {
        dispatch_cancel(_dataTimer);
        _dataTimer = nil;
    }
}

-(void)createTimer{
 
    WS(weakSelf)
    
    NSTimeInterval period = 5.0; //设置时间间隔
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    _dataTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    dispatch_source_set_timer(_dataTimer, dispatch_walltime(NULL, 0), period * NSEC_PER_SEC, 0); //每秒执行
    dispatch_source_set_event_handler(_dataTimer, ^{
        //在这里执行事件
        NSLog(@"每秒执行test");
  
    });
    
    dispatch_resume(_dataTimer);
    
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,469评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,287评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,253评论 19 139
  • 标签(空格分隔): Android 1、在C:\users\用户名.android目录下新建了一个adb_usb....
    背影杀手不太冷阅读 1,675评论 0 1
  • 某人得一宝贝: 紫砂壶, 每夜都放床头。 一次失手将紫砂壶 壶盖打翻到地上, 惊醒后 甚恼, 壶盖没了,留壶身何用...
    不能丢人阅读 334评论 0 0