美文网首页
1.6、iOS面试题之runloop

1.6、iOS面试题之runloop

作者: zmfflying | 来源:发表于2020-06-14 14:41 被阅读0次

    1.哪些地方会用到runLoop?

    https://www.jianshu.com/p/024782defe60

    RunLoop与NSTimer的结合

    RunLoop与NSURLConnection的结合

    需要子线程保活来执行后台任务

    2.runLoop的原理是什么?

    RunLoop是通过内部维护的事件循环(Event Loop)来对事件/消息进行管理的一个对象。

    1、没有消息处理时,休眠已避免资源占用,由用户态切换到内核态(CPU-内核态和用户态)

    2、有消息需要处理时,立刻被唤醒,由内核态切换到用户态

    3.NSTimer的target使用会有什么问题吗?

    内存泄露

    4.NStimer准吗?谈谈你的看法?如果不准该怎样实现一个精确的NSTimer?

    1.不准

    2.不准的原因如下:

    1、NSTimer加在main runloop中,模式是NSDefaultRunLoopMode,main负责所有主线程事件,例如UI界面的操作,复杂的运算,这样在同一个runloop中timer就会产生阻塞。

    2、模式的改变。主线程的 RunLoop 里有两个预置的 Mode:kCFRunLoopDefaultMode 和 UITrackingRunLoopMode。当你创建一个 Timer 并加到 DefaultMode 时,Timer 会得到重复回调,但此时滑动一个ScrollView时,RunLoop 会将 mode 切换为 TrackingRunLoopMode,这时 Timer 就不会被回调,并且也不会影响到滑动操作。所以就会影响到NSTimer不准的情况。PS:DefaultMode 是 App 平时所处的状态,rackingRunLoopMode 是追踪 ScrollView 滑动时的状态。

    方法一:

    1、在主线程中进行NSTimer操作,但是将NSTimer实例加到main runloop的特定mode(模式)中。避免被复杂运算操作或者UI界面刷新所干扰。

    2、在子线程中进行NSTimer的操作,再在主线程中修改UI界面显示操作结果;

    方法二:直接使用GCD替代!

    相关文章

      网友评论

          本文标题:1.6、iOS面试题之runloop

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