专栏首页DannyHoo的专栏iOS开发中利用block解决NSTimer的循环引用问题

iOS开发中利用block解决NSTimer的循环引用问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/80313441

循环引用问题:

将一个NSTimer对象作为一个控制器的的属性,这时当前VC对NSTimer对象进行了一次强引用。在创建NSTimer兑现的时候,NSTimer对象又将当前VC作为自己的target,这时NSTimer对象对当前VC进行了一次强引用,这样就造成了NSTimer和当前VC的循环引用,从而让VC和NSTimer都无法释放,最终导致内存泄漏。

通常代码:

我们可以为NSTimer创建一个分类,在分类中添加一个创建NSTimer对象的方法,以避免循环引用的问题。

NSTimer分类代码:

.m中的代码

可复制代码:

  • (NSTimer *)resolve_scheduledTimerWithTimeInterval:(NSTimeInterval)inerval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block{ return [NSTimer scheduledTimerWithTimeInterval:inerval target:self selector:@selector(resolve_blcokInvoke:) userInfo:[block copy] repeats:repeats];

}

  • (void)resolve_blcokInvoke:(NSTimer *)timer { void (^block)(NSTimer *timer) = timer.userInfo; if (block) { block(timer); }

}

使用代码:

可复制代码:

weakifySelf self.timer = [NSTimer resolve_scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer *timer) { strongifySelf [self doThings]; NSLog(@"----------------"); }];

关于weakSelf和strongSelf:

define weakifySelf \

__weak __typeof(&*self)weakSelf = self;

define strongifySelf \

__strong __typeof(&*weakSelf)self = weakSelf;

demo地址:https://gitee.com/liangsenliangsen/nstimer_loop_reference.git 本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 简单使用gitHub客户端

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • 升级Xcode8之后快捷键无法注释

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • iOS提交审核:关于您的 App 正在使用广告标识符 (IDFA)的问题

    转载文章地址:http://blog.csdn.net/napianlvye1992/article/details/50496846

    用户1451823
  • iOS计时器:NSTimer

    前阵子在整理RunLoop原理的时候发现代码中用到了很多NSTimer,其中也出现了挺多问题,这里整理了一些NSTimer的使用方法供大家使用避坑。

    用户5521279
  • 流体布局、响应式布局

    设备屏幕有多种不同的分辨率,页面适配方案有如下几种: 1、全适配:响应式布局+流体布局 2、移动端适配:

    Devops海洋的渔夫
  • 有效读文献的十大简单规则

    下面会分别介绍这十个规则,规则1-5是总体建议,规则6-8与阅读哲学理论相关,规则9-10指导你阅读后该做什么问什么?

    生信菜鸟团
  • WCF认证:X.509证书1 非对称密码学(Asymmetric Cryptography)二、数字证书三、通过凭证三个属性来分析X.509证书

    站在消息交换的角度,密码学就是帮助我们实现对整个消息或者对消息的某个部分进行数字签名和加密的理论和方法

    JavaEdge
  • 邻接矩阵学习

    邻接矩阵:是表示顶点之间相邻关系的矩阵。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间的关系(边或弧)的数据,这个二维数组称为邻接矩阵。邻接...

    用户3003813
  • tf.io.parse_single_example()

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    狼啸风云
  • Win10+Python3环境下安装LabelImg数据标注工具

    对于从事计算机视觉中目标检测领域的人来说,数据集所有工作的开始,没有特定领域的数据集,后续工作基本没法展开。但是通用的VOC或者COCO数据集可能根本没法使用适...

    AI那点小事

扫码关注云+社区

领取腾讯云代金券