ios-Runloop

    xiaoxiao2025-02-05  3

    1.Runloop的实现原理,请查看该博客:http://www.jianshu.com/p/37ab0397fec7  或  http://blog.ibireme.com/2015/05/18/runloop/

    个人笔记:

    一.调用主线程的run loop进行阻塞的各种方式:

    [[NSRunLoop mainRunLoop] run]; //主线程永远等待,但让出主线程时间片

    [[NSRunLoop mainRunLooprunUntilDate:[NSDate distantFuture]]; //等同上面调用

    [[NSRunLoop mainRunLooprunUntilDate:[NSDate date]]; //立即返回

    [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10.0]]; //主线程等待,但让出主线程时间片,然后过10秒后返回

    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate: [NSDate distantFuture]]; //主线程等待,但让出主线程时间片;有事件到达就返回,比如点击UI等。

    [[NSRunLoop mainRunLooprunMode:NSDefaultRunLoopMode beforeDate: [NSDate date]]; //立即返回

    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate: [NSDate dateWithTimeIntervalSinceNow:10.0]]; //主线程等待,但让出主线程时间片;有事件到达就返回,如果没有则过10秒返回。

    二.当add一个timer或port后,除非设定了超时时间或者remove了,否则runloop不会自动退出。可以用来常驻子线程,让子线程一直处理某事情,例如:AFNetworking中利用后台线程处理delegate回调。

    三.几种应用场景:

    1.开启一个常驻子线程(让子线程不消亡,等待其他线程消息,处理事件)。

    2.线程之间同步。

    3.在子线程中开启定时器或执行performSelector事件。

    4.让定时器或performSelector事件在特定模式下执行。

    5.添加observer监听runloop状态,比如监听点击事件。

    四.与runloop、performSelector有关的timer一些接口:http://blog.csdn.net/lengshengren/article/details/12905635

    转载请注明原文地址: https://ju.6miu.com/read-1296118.html
    最新回复(0)