读这篇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 实现的功能
AutoreleasePool
事件响应
手势识别
界面更新
定时器
PerformSelecter
关于GCD
关于网络请求
RunLoop 的实际应用举例
AFNetworking
AsyncDisplayKit