美文网首页
NSTimer使用分类避免循环引用

NSTimer使用分类避免循环引用

作者: jiangamh | 来源:发表于2015-12-23 18:06 被阅读457次

     定时器 ,我们开发中用的很多,NSTimer一不小心很容易造成循环引用,引起内存泄漏,于是写了个分类,使用很简单,只管创建,不用调用invalidate停止定时器(当然如果需要要的话,当然可以手动调用),代码如下:

NSTimer分类头文件

      其中还定义了TimerTarget类,这个类的实例作为NSTimer的target,也就是说定时器触发了TimerTarget的方法,这就避免了控制器(或者其他)和NSTimer 的循环引用。

 分类实现如下:

NSTimer分类实现

      通过代码我们可以看到参数中有个existObj的对象(一般传控制器),这个参数主要用于判断移除定时器的时机,existOjb使用了weak修饰,weak有个特性:他不会是引用计数加一,当所指向的对象消亡时,会自动值为nil,正是通过这一点判断需要移除定时器,比如我么退出当前页面,也就是当前控制器消亡,这个时候会移除定时器。

TimerTarget的实现:

TimerTarget实现

     可以看出每次定时器触发事件时,先判断existObj对象是否还存在,如何存在正常回调,如何不存在,这个时候定时器也没有存在的意义,此时,移除定时器。

使用简单:

使用

运行结果:

   当退出当前控制器,ViewController dealloc打印了,说明没有内存泄漏,同时timeUserInfo:test信息不再打印,定时器也自动移除了,达到了要的效果。

   总结:这里主要有两点,1使用内部类避免控制器与定时器耦合在一起 2巧用weak的特性判断对象消亡时机。

相关文章

  • NSTimer使用分类避免循环引用

    定时器 ,我们开发中用的很多,NSTimer一不小心很容易造成循环引用,引起内存泄漏,于是写了个分类,使用很简...

  • NSTimer循环引用的问题

    问题简介 在iOS中,NSTimer的使用非常频繁,但是NSTimer在使用中需要注意,避免循环引用的问题: 由于...

  • iOS之NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • iOS NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • 面试题:NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • iOS之NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • NSTimer循环引用的几种解决方案

    前言 在iOS中,NSTimer的使用是非常频繁的,但是NSTimer在使用中需要注意,避免循环引用的问题。之前经...

  • NSTimer避免循环引用

    会不会产生问题分两种情况:如果NSTimer在生成时repeats参数被设为NO,即一次性的定时器,那么不会有问题...

  • NSTimer的循环引用

    NSTimer基本使用 NSTimer与RunLoop NSTimer 循环引用的问题 如何在子线程使用NSTim...

  • 优雅的解决NSTimer循环引用

    一. 使用NSProxy解决NSTimer、CADisplayLink等循环引用 如下使用NSTimer如果不做任...

网友评论

      本文标题:NSTimer使用分类避免循环引用

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