美文网首页
iOS 避免NSTimer循环引用的解决办法

iOS 避免NSTimer循环引用的解决办法

作者: 街角没有咖啡店 | 来源:发表于2021-09-16 11:28 被阅读0次



        对于需要用到计时的场景多而且杂的时候,NSTimer 的循环引用问题不胜其烦,需要在各处地方写它的停止方法,往往搞的代码乱糟糟的。

        我在开发过程中有了一个想法,就是搞一个全局的单例来持有 NSTimer ,在它的触发方法中,将持有者的 Block 进行回调,这样就一劳永逸的解决了它的循环引用问题。

        由此便一发不可收拾,目前在该项目中本着使用简单、节省资源的原则下,新增了许多新特性,推荐各位一用,觉得好的话还请多多点赞关注,谢谢~

        话不多说,上地址:

    链接: GitHub
    链接: Gitee

    JLTimer介绍

    一款基于 NSTimer 、好用高效的计时器

    • 采用单例持有 NStimer 对象,通过 Block 实时回调给创建者,使控制器与其完全解耦,再也不用担心 NStimer 和持有者的循环引用问题。

    • 全自动管理,计时器无业务时时自动释放,创建者无需处理后续 invalid 等操作(仅限不重复的计时类型,当 isRepeat 是 true 时,也仅需调用 stopTimer 方法停止计时即可自动释放)。

    • 无论同时运行着多少计时任务,全局同一时间只有一个 NSTimer 在运行,有效节省系统资源。

    • 代码风格简洁易懂,使用 Block 回调方式,无需另写触发方法。

    使用说明

    1.快捷创建一个只回调一次的计时器。

    [[JLTimer shared] addNewTaskWithOnceTime:5 handleBlock:^{
        
        //5秒后回调并停止计时           
    }];
    

    2.快捷创建一个倒计时的计时器。

    [[JLTimer shared] addCountDownTaskWithTime:3 handleBlock:^{
    
        //每1秒回调1次,到第3秒时停止计时
    
    }];
    
    

    3.创建一个常规计时器,附带停止方法。

    NSString *timerID = [[JLTimer shared] addNewTaskWithTime:1 isRepeat:true handleBlock:^{
                
        //每1秒回调1次,一直重复,返回值为当前计时器的ID
    }];
    
    //可以在业务需要的时候调用stopTimerWithID方法停止该计时器
    
    [[JLTimer shared] stopTimerWithID:timerID];
    

    相关文章

      网友评论

          本文标题:iOS 避免NSTimer循环引用的解决办法

          本文链接:https://www.haomeiwen.com/subject/vndrgltx.html