美文网首页
NSTimer使用遇到的问题

NSTimer使用遇到的问题

作者: PokerFace_u | 来源:发表于2018-10-24 15:10 被阅读12次

1 如果能找到合适的时机,无论timer是weak修饰还是strong修饰,主动调用 invalidate方法,那就调用invalidate,timer和控制器都能够释放
2 如果找不到合适时机,或者以防止漏写 invalidate方法,要注意:
一,要打破循环引用,添加__weak typeof(self) weakSelf = self;
二,要防止 timer直接引用self或者weakSelf
依照以上两点,iOS10之后用以下方法初始化,

__weak typeof(self) weakSelf = self;
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 repeats:YES block:^(NSTimer * _Nonnull timer) {
[weakSelf doSomeThing];
NSLog(@"----------------");
}];

iOS10之前,写个分类,参考文章 https://www.jianshu.com/p/2fe076e5e255,原理同系统方法相同

注意的是,在vc的dealloc方法中记得调用invalidate
- (void)dealloc {
[self.timer invalidate];
}

其实内部是 self(实例对象)--->timer——>self(类对象)——>block——>weakSelf——>self(实例对象)
当我们谈到循环引用时,其实是指实例对象间的引用关系。类对象在App杀死时才会释放,在实际开发中几乎不用关注类对象的内存管理
简化理解成 self-->timer——>block——>weakSelf——>self
这样打破 timer对self(或者weakSelf)的强引用,
既不是循环引用,又没有直接让timer引用self(weakSelf)所以退出控制器时 会调用 控制器的dealloc方法,不会造成内存泄漏

github:https://github.com/leeeGreat/LWTimer.git

相关文章

  • NSTimer使用遇到的问题

    1 如果能找到合适的时机,无论timer是weak修饰还是strong修饰,主动调用 invalidate方法,那...

  • iOS中关于Timer的使用须知

    NSTimer的使用问题 用NSTimer做计时器循环事件的时候,很有可能会遇到以下两个问题: 正常启动的time...

  • NSTimer的循环引用

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

  • ios中循环引用问题

    ios中循环引用问题 NO1: NSTimer 问题:当你创建使用NSTimer的时候,NSTimer会默...

  • 使用NSTimer时遇到的问题归类

    1. NSRunLoopCommonModes和Timer 当使用NSTimer的scheduledTimerW...

  • RunLoop入门

    之前在使用NSTimer时,遇到一个问题,NSTimer启动了,但是只会出现一次定时,之后就不起作用。问了同...

  • NSTimer循环引用的问题

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

  • 第六章、Block相关

    一、你都遇到过哪些循环引用?你又是怎么解决的? 1、NSTimer创建使用NSTimer的时候,NSTimer会默...

  • 解决NSTimer循环引用的三种方法

    总结一下项目中遇到的NSTimer循环引用问题 上述方法NSTimer作为属性时会产生循环引用问题,weaksel...

  • OC内存管理-NSTimer

    一、NSTimer 使用 1.1 使用问题 对于上面使用timerWithTimeInterval方式创建的tim...

网友评论

      本文标题:NSTimer使用遇到的问题

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