NSTimer可以用来执行一些定时任务,比较常用的方法就是:

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

可是,仔细看官方文档中对于参数target的说明,可以看到这样一段:

target

The object to which to send the message specified by aSelector when the timer fires. The timer maintains a strong reference to this object until it (the timer) is invalidated.

也就是说,NSTimer会强引用target.

那么如果我们按照通常的用法,在view controller中创建一个timer

self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];

就会带来循环引用,viewController的dealloc()方法不会正确调用,从而导致内存泄漏。

所以正确的做法,如果是在view controller中持有了NSTimer的对象,那么需要确保在view controller关闭之前,执行如下方法:

[timer invalidate];

有些人推荐是在viewDidDisappear的时候调用这个方法,但在部分业务逻辑中,跳转到下一个页面的时候并不是一定需要停止这个定时器的;所以需要根据自己的需要来调整。

另外,多说一句,看到有些代码中使用timer的时候,定义的selector都没有定义参数的,然后根据官方文档,

The selector should have the following signature: timerFireMethod: (including a colon to indicate that the method takes an argument). The timer passes itself as the argument, thus the method would adopt the following pattern:

- (void)timerFireMethod:(NSTimer *)timer;

也就是说,这个selelctor实际上是需要带上timer作为参数的。

联想到上一篇谈到NSNotificationCenter 的文章,

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

里面对于selector其实也说得很清楚,也是需要带上一个参数而且只能带上一个NSNotification的对象作为参数的.

notificationSelector

Selector that specifies the message the receiver sends notificationObserver to notify it of the notification posting. The method specified by notificationSelector must have one and only one argument (an instance of NSNotification).

The End.

原文:http://www.cnblogs.com/agger0207/p/4419348.html

NSTimer 会强持有所在的 target

转载于:https://www.cnblogs.com/benbenzhu/p/4832651.html

NSTimer注意内存泄露(真该死)相关推荐

  1. 浅析NSTimer CADisplayLink内存泄露

    偶得前言 本篇文章中我们主要谈谈NSTimer\CADisplayLink在使用过程中牵扯到内存泄露的相关问题及解决思路(文章末尾会附上Demo),有时候我们在不知情的情况容易入坑,最关键你还不知道自 ...

  2. NSTimer 增加引用计数, 导致内存泄露,

    NSTimer 增加引用计数, 导致内存泄露, self.adTimer   = [NSTimerscheduledTimerWithTimeInterval:5.0target:selfselect ...

  3. 使用telephonymanager真机调试 闪退_watchOS 上的一次 SKView 内存泄露调试

    前几个版本,在 YaoYao watch 端加了点 SpriteKit 的动画优化了一下效果,后来被证明是一次失败的负优化. 现象 用户反馈YaoYao HIIT模式下偶尔程序闪退,线上并未收集到 c ...

  4. umdh windbg分析内存泄露

    A.利用工具umdh(user-mode dump heap)分析 1设置gflags.exe标志 r Gflags标志设置好后,开启cmd 键入要定位内存泄露的程序gflags.exe /i mem ...

  5. log4cplus的内存泄露问题

    今天使用log4cplus在MFC调用时老发现关闭程序出现大面积的内存泄露.真操蛋,控制台没问题. 官方有人说是 微软工具检测的问题,并非内存泄露. 搜索一老外网页 http://stackoverf ...

  6. 离开当前屏幕的判断方法_Android App内存泄露测试方法总结

    喜欢我的文章,欢迎关注微信公众号「软件测试艺术」,一起学习提高. 1. 内存泄露 Android系统为每一个运行的程序都指定了一个最大运行内存,超过这个值则会触发OOM机制,反应在界面就是闪退. Cr ...

  7. iOS Target-Action模式下内存泄露问题深入探究

    在我们日常开发中,我们或多或少的都会遇到循环引用的问题.其实问题的实质就是造成了互相持有的关系,在对象释放的时候,就好像产生了一个死锁一样,系统没有办法释放其中的任何一个对象,就造成了内存泄露的问题. ...

  8. [iOS] 使用 blockable NSTimer 避免内存泄漏

    背景 此知识点,从阅读<Effective Objective-C>中学习到,现扩展到 Swift 并兼容 iOS 10+ NSTimer 提供定时执行任务的功能,可用于延时或者重复处理事 ...

  9. iOS开发内存泄露修复

    2019独角兽企业重金招聘Python工程师标准>>> 一:写在前面 请使用ARC!!! 如果使用的第三方库不支持ARC机制,可以在target->build phase-&g ...

最新文章

  1. Jquery实现的Tabs页签
  2. .NET版本与CLR版本及兼容性
  3. 1.10 throws和throw:声明和抛出异常
  4. opencv python 图像测试上采样(升采样)(cv2.pyrUp()) 下采样(cv2.pyrDown()) 池化 滑动窗口(BorderTypes)
  5. 在64位的linux中运行32位的应用程序
  6. 使用原生 Java 玩转验证码【含 DATA-URIS 介绍】
  7. 我就改了一行代码,为什么就全超时了?
  8. 数据库系统原理(第三章数据库设计 )
  9. Linux下vsftpd基本配置和虚拟用户设置的安全方法
  10. Microsoft® Deployment Toolkit 2010之快速部署Windows 7
  11. 管理感悟:说说NWT裁员的经历及关键错误
  12. python保存对话框_python打开文件对话框的方法
  13. PIC单片机c语言休眠,PIC16F72 休眠程序
  14. 【WAF技巧拓展】————4、web应用防火墙逃逸技术(一)
  15. 信息搜集-读取微信聊天记录
  16. SharePoint服务器端对象模型 之 使用CAML进行数据查询
  17. 牛客练习赛46-华华跟奕奕玩游戏(期望+逆元)
  18. 学英语《每日一歌》之she
  19. 【AIX】LPar分区技术、逻辑CPU、虚拟CPU、物理CPU
  20. 2021年 山东大学 算法导论考卷 回忆版

热门文章

  1. java 实例对象拷贝,实例详解java对象拷贝
  2. yili邮箱服务器配置,手把手教 个人SMTP服务器的配置 -电脑资料
  3. mysql insert 字符集_有关 MySQL 字符集的注意事项-爱可生
  4. mysql移动数据的语句是_mysql基本语句
  5. 配置中文_星球大战:战机中队配置需求公布 支持中文
  6. 山东省102021年普通高考成绩查询,山东高考成绩今日发布!成绩查询看这里!
  7. Python 列表list与数组array的区别
  8. 串口光猫应用领域及技术参数详解
  9. 国家开放大学2021春1108钢结构(本)题目
  10. [渝粤教育] 西南科技大学 财务管理与分析 在线考试复习资料