美文网首页
RunLoop学习笔记

RunLoop学习笔记

作者: 宇哥说 | 来源:发表于2017-08-30 10:26 被阅读0次

    读这篇Blog:https://blog.ibireme.com/2015/05/18/runloop/

    学习过程

    收货比较大,写的很清晰,也举了实际Runloop使用场景
    我喜欢通过对比不同语言来相互理解,事实上语言的差别是非常小的,整体的逻辑关系、实现原理没有本质区别,之前写过SWT程序(Java语言的PC界面开发库,Eclipse就是使用SWT实现的),看一下:

    public static void main (String [] args) {
        Display display = new Display ();
        Shell shell = new Shell(display);
        
        Text helloWorldTest = new Text(shell, SWT.NONE);
        helloWorldTest.setText("Hello World SWT");
        helloWorldTest.pack();
        
        shell.pack();
        shell.open ();
        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ()) display.sleep ();
        }
        display.dispose ();
    }
    

    在Java的main方法中,程序启动后,如果不想main函数执行完结束,那么就要使用死循环的方式,也就是while循环实现,其中while退出条件是程序退出(PC程序不同于移动端,有关闭程序按钮),shell可以认为类似iOS中的UIWindow界面容器,shell.isDisposed ()就是是否销毁(退出)的条件
    如果在while中死循环,那么CPU满负荷工作,所display.readAndDispatch ()判断当前是否在读和分发操作系统事件,如果没有,当前线程睡眠,如果有readAndDispatch,

    RunLoop 的内部逻辑

    RunLoop 内部的逻辑大致如下:


    苹果用 RunLoop 实现的功能

    AutoreleasePool
    事件响应
    手势识别
    界面更新
    定时器
    PerformSelecter
    关于GCD
    关于网络请求

    RunLoop 的实际应用举例

    AFNetworking
    AsyncDisplayKit

    相关文章

      网友评论

          本文标题:RunLoop学习笔记

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