美文网首页
[iOS]避免定时器循环引用的一种解决方案

[iOS]避免定时器循环引用的一种解决方案

作者: 未来行者 | 来源:发表于2017-07-27 13:51 被阅读45次

为什么有weakTimer?

因为直接在控制器中使用定时器方法[timerWithTimeInterval: target: selector: userInfo: repeats:]或者[scheduledTimerWithTimeInterval],会出现循环引用的情况.在控制器的delloc方法中销毁定时器有可能是不成功的,因为控制器被循环引用,根本不可能被释放,所以走不到这个方法来.
循环引用的过程:viewController->timer->target:viewController.
解决方案:viewController->weakTimer->timer.

使用方法如下

  1. 导入头文件->#import "TPWeakTimer.h"
  2. 使用代码:
#import "TempViewController.h"
#import "TPWeakTimer.h"

@interface TempViewController ()
//懒加载初始化
@property (nonatomic, strong) TPWeakTimer *timer;
@end

@implementation TempViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor orangeColor];
    
    //调用方法一
    //[self.timer tp_scheduledTimerWithTimeInterval:1 userInfo:nil repeat:YES userInfoBlock:^(id obj) {
       // NSLog(@"123");
    //}];
    
    //调用方法二
    [self.timer tp_timerWithTimeInterval:1 userInfo:nil repeat:YES userInfoBlock:^(id obj) {
    //这里写你要做的定时器操作
        NSLog(@"123");
    }];
}

- (void)dealloc{
    //销毁定时器
    [self.timer fireTimer];
    NSLog(@"%s",__func__);
}

/*
 */
- (TPWeakTimer *)timer
{
    if (!_timer) {
        _timer = [[TPWeakTimer alloc] init];
    }
    return _timer;
}

github地址,请戳!

相关文章

  • 2019-03-07 对WKWebView中的循环引用的理解

    WKWebView的这个循环引用很像定时器的循环引用。定时器的循环引用是因为系统runloop循环 强引用了执行...

  • [iOS]避免定时器循环引用的一种解决方案

    为什么有weakTimer? 因为直接在控制器中使用定时器方法[timerWithTimeInterval: ta...

  • 高性能iOS应用开发 笔记07

    Timer循环引用 对象持有定时器定时器持有对象运行循环也持有定时器因为循环引用 dealloc 永远不会被调用 ...

  • iOS 避免循环引用

    一、block引发的循环引用1、在block中使用对自身对象的弱引用来替换self 2、如果在block使用了成员...

  • ios 避免循环引用

    类似网络请求的情况下会导致循环引用,但是如果网络请求的对象是局部变量,就必须用self,不能用weakSelf,否...

  • 个人2019年度学习小目标

    weak & strong 及自动引用计数机制的深入学习 定时器造成循环引用的原因总结 离屏渲染机制原理及如何避免...

  • iOS 避免循环引用【译】

    今天看文章发现一片关于Retain Cycle的老生常谈的问题,但是作者从开发常见场景的代理和Block分析了原因...

  • iOS 避免循环引用【译】

    今天看文章发现一片关于Retain Cycle的老生常谈的问题,但是作者从开发常见场景的代理和Block分析了原因...

  • weak-strong dance探究

    循环引用 循环引用是iOS开发常见的问题,虽然现在普遍是ARC工程,但是这个问题仍然无可避免。一般都是两个强引用对...

  • __block 和__ weak 的区别

    1:在 block 下循环引用的问题.○ __block 本身并不能避免循环引用,避免循环引用需要在block内部...

网友评论

      本文标题:[iOS]避免定时器循环引用的一种解决方案

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