iOS开发:浅谈子线程中添加定时器

本文探讨了在iOS开发中如何在子线程中使用定时器,强调了界面滑动时定时器停止执行的问题以及解决方案。通过理解RunLoop的工作原理,特别是在kCFRunLoopDefaultMode和UITrackingRunLoopMode模式间的切换,确保定时器在滑动时也能持续运行。同时,文章指出子线程Runloop需要手动启动,并在停止定时器时进行适当处理以避免内存泄漏。
摘要由CSDN通过智能技术生成

##目标
开启一个子线程,并添加一个定时器,在进入界面时启动定时器,在退出界面时销毁定时器。

##demo地址
https://github.com/pengwj/blogWork/tree/master/code/TimerTest

##注意点
1、定时器默认添加在NSDefaultRunLoopMode,界面滑动时会导致定时器停止执行。
2、子线程中RunLoop默认不启动,所以需要往里面添加任务,然后手动启动runloop。

##RunLoop
每一个线程创建的时候,都至少会创建一个RunLoop,孙源大佬的视频中有提到RunLoop可以嵌套,这里就不展开了。
#####系统默认注册五个Mode的RunLoop

  • kCFRunLoopDefaultMode:app的默认mode,一般代码执行都在这个mode先运行的。
  • UITrackingRunLoopMode:界面滑动mode,为了提升滑动时的流畅度,当界面滚动时(多用于ScrollView的滑动触摸)系统会强制切换到该mode下。
  • UIInitializationRunLoopMode:在app刚启动时会调用该mode,执行启动相关操作,启动后就不再使用。
  • GSEventReceiveRunLoopMode:接收内部系统事件的mode,开发中通常用不上。
  • kCFRunLoopCommonModes:组合mode,并不是一个实际的mode,当注册该mode时会同时在kCFRunLoopDefaultMode和UITrac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值