RunLoop学习笔记

读这篇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学习笔记_第1张图片


RunLoop学习笔记_第2张图片

苹果用 RunLoop 实现的功能

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

RunLoop 的实际应用举例

AFNetworking
AsyncDisplayKit

你可能感兴趣的:(RunLoop学习笔记)