美文网首页工作生活
NSTimer的使用 避免循环引用 兼容iOS8系统

NSTimer的使用 避免循环引用 兼容iOS8系统

作者: 维若 | 来源:发表于2019-07-04 14:15 被阅读0次

其实我知道大家不想看废话,但是我还是想写,最近哀家的内人要学习,哀家也开始写日志了,还写得贼拉拉仔细。
工作需要,写个计时器,然后怎么写忘了,网上搜了一下,出来了一大片避免循环引用,大部分都说要写个类,然后self 弱引用这个类变量,要知道,楼主撸代码撸了有7个年头了,一句代码都不想多写,能拖控件就拖控件,我把我的方法贴出来,如果有问题,请大家不吝赐教。

1.创建 strong修饰timer变量,如果创建weak,可能会被立即销毁。

@property (strong, nonatomic)NSTimer *carouselTimer;

2.实现它的get方法,避免重复创建。

-(NSTimer *)carouselTimer
{
    if (!_carouselTimer) {
        _carouselTimer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(autoDisplayCarousel) userInfo:nil repeats:true];
    }
    return _carouselTimer;
}

3.当界面出现的时候把计时器添加到runloop中。

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //在用户触发滚动行为时,计时器会停止计时
   if (self.carouselTimer) {
        [[NSRunLoop currentRunLoop]addTimer:_carouselTimer forMode:NSDefaultRunLoopMode];
    }
}

4.在界面即将消失的时候,销毁计时器。

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if (_carouselTimer ) {
        [_carouselTimer invalidate];
    }
}

当有强指针指向变量A的时候, 变量A就不能释放。必须先释放指向变量A的对象。

viewWillDisappear的时候,调用[timer invalidate],销毁计时器,timer = nil,去掉了timer对self的强引用。
循环引用就是A强引用B,B又强引用A,相互都得不到释放
划重点,只要有强引用指针指向变量,变量就得不到释放。必须先释放强引用指针对象。

相关文章

  • NSTimer的使用 避免循环引用 兼容iOS8系统

    其实我知道大家不想看废话,但是我还是想写,最近哀家的内人要学习,哀家也开始写日志了,还写得贼拉拉仔细。工作需要,写...

  • NSTimer循环引用的问题

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

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

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

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

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

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

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

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

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

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

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

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

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

  • NSTimer避免循环引用

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

  • NSTimer的循环引用

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

网友评论

    本文标题:NSTimer的使用 避免循环引用 兼容iOS8系统

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