RunLoop

作者: CharlyZheng | 来源:发表于2017-05-19 11:23 被阅读6次

    1. NSTimer 被UIScrollView暂停

    当界面同时存在有定时器和UIScrollView时,比如:一个界面顶部是一个由定时器控制的无限轮播图,下面是一个UIScrollView,这时你如果拖动下面UIScrollView,定时器就会暂停,等UIScrollView的拖动事件结束后定时器才会接着执行。

    当你创建输入源(Timer)的时候,需要将其分配给 runloop 中的一个或多个模式。改Timer只会在改特定模式下被触发。

    ****下面的方法 timer 被添加到 NSDefaultRunLoopMode****

        timer = [NSTimer scheduledTimerWithTimeInterval:10.0
                                                 target:self
                                               selector:@selector(getNotificationNews)
                                               userInfo:nil
                                                repeats:YES];
    
    

    ****下面的方法 timer 被添加到 NSRunLoopCommonModes****

        timer = [NSTimer timerWithTimeInterval:10.0
                                        target:self
                                      selector:@selector(getNotificationNews)
                                      userInfo:nil
                                       repeats:YES];
        
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    
    • NSDefaultRunLoopMode:将NSTimer添加到主线程NSRunLoop的默认模式下,只有主线程是默认模式下才能执行NSTimer(滚动scrollView,RunLoop默认进入Tracking模式,所以NSTimer不会有效果)。
    • UITrackingRunLoopMode:将NSTimer添加到主线程NSRunLoop的追踪模式下,只有主线程是追踪模式下才能执行NSTimer。(例如滚动scrollView的时候就会监听到计时器)
    • NSRunLoopCommonModes:Common是一个表示,它是将NSDefaultRunLoopMode 和 UITrackingRunLoopMode标记为了Common
      所以,只要将 timer 添加到 Common 占位模式下,timer就可以在Default和UITrackingRunLoopMode模式下都能运行

    深入理解RunLoop

    相关文章

      网友评论

          本文标题:RunLoop

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