美文网首页
NSTimer引起的循环引用

NSTimer引起的循环引用

作者: cabbagesmile | 来源:发表于2021-05-27 11:02 被阅读0次

    NSTimer大多数情况下载viewWillDisappear或者viewDidDisappear中释放就可以。但是有的场景是跳转到下一级页面,还需要NSTimer在跑,这时候就不能在那两个方法里面stopTimer了。 dealloc这个方法根本就不会触发。 方法有很多,但是以下方法感觉最简单,改动小。 

    新建一个类。HFTimerProxy

    HFTimerProxy.h

    @interface HFTimerProxy : NSProxy

    @property(weak, nonatomic) id target;

    @end

    HFTimerProxy.m

    #import "HFTimerProxy.h"

    #import

    @implementation HFTimerProxy

    - (NSMethodSignature *)methodSignatureForSelector:(SEL)sel {

        return [self.target methodSignatureForSelector:sel];

    }

    - (void)forwardInvocation:(NSInvocation*)invocation {

        [invocationinvokeWithTarget:self.target];

    }

    @end

    在对应的VC页面添加属性

    @property (strong, nonatomic) HFTimerProxy *timerProxy;

    - (HFTimerProxy *)timerProxy {

        if(!_timerProxy) {

            _timerProxy= [HFTimerProxyalloc];

            _timerProxy.target = self;

        }

        return _timerProxy;

    }

    在创建Timer时,target使用self.timerProxy

    /// 创建定时器

    - (void)createTimer{

        [self stopTimer];

        //创建 1 秒回调一次定时器

        self.timer = [NSTimer timerWithTimeInterval:1 target:self.timerProxy selector:@selector(timerCallBack:) userInfo:nil repeats:YES];

        [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

    }

    相关文章

      网友评论

          本文标题:NSTimer引起的循环引用

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