RunLoop

今天给大家说一下我对Runloop的认识,说的不好的地方希望大家帮忙指出。

  • 什么是RunLoop?
    简单的来说,runloop就是一个事件循环处理机制,有事情做得时候它就去做,没事的话它就处于休眠状态。

  • RunLoop的mode有哪几种?
    mode总共有3种,分别是:
    1.NSDefaultRunLoopMode :默认

    2.NSRunLoopCommonModes:一组配置模式

    3.UITrackingRunLoopMode:滚动视图滚动的模式

  • RunLoop在分线程该怎么做?
    在主线程中,RunLoop默认有事情就启动,而在分线程中,RunLoop是得我们手动启动的,不然就算你在分线程创建了任务,它也走不了,但是又有一个问题随之而来了,在主线程里,RunLoop在事情结束后自动关闭,但我们在分线程里该如何结束RunLoop呢?这个时候其实我们定义一个bool值,来判断事情是否结束了,如果结束了,我们就关闭RunLoop。

while(!isFinish)
     {
       [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
     }
  • tableView\collectionView\scrollView滑动的时候为什么NSTimer停止?如何让滚动视图事件和Timer事件同时处理?
    这个问题相信大家都不陌生吧,我个人经常用collectionview来设计一个滚动广告栏,经常就会出现这个问题,一开始很懵,不知道这是什么原因,后来才知道原来是RunLoop在搞鬼,那么这个时候,我们该如何解决这个问题呢?其实当你认识RunLoop的特性:一个RunLoop不能同时共存于2个模式。你就发现解决方法很简单,就一行代码,那就是修改NSTimer的mode。让NSTimer的model和collectionview的一致。
[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode]
  • 该注意的地方:
    1.任何情况,RunLoop都不需要手动创建(alloc),如果需要获取当前线程中的RunLoop,用currentRunLoop即可。
    2.在主线程中,系统默认创建并且启动主线程的RunLoop,但是在分线程中RunLoop不会默认启动,得手动启动。
    3.主线程中的RunLoop,默认的mode是NSDefaultRunLoopMode。

以上就是我对RunLoop的一些了解和见解,希望对你有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值