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



    对于需要用到计时的场景多而且杂的时候,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循环引用的解决办法)