2016 - 1 - 20 runloop学习

mac2022-06-30  15

一:Runloop基本知识

1.本质就是运行循环

2.基本作用:

  2.1保证程序持续运行

  2.2处理APP中的各种事件:触摸,定时器,selector...

  2.3节省CPU资源,系统程序性能:它会让主线程在工作时工作,非工作时休息。

  2.4....

二:main函数中的Runloop

  1.

1 int main(int argc, char * argv[]) { 2 @autoreleasepool { 3 return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 4 } 5 }

   2.第三行中的UIApplicationMain函数内部就启动了一个Runloop.

也就说,UIApplicationMain函数一直没有返回,保证了程序的持续运行。

   3.这个启动的Runloop启动后默认是和主线程相关联的。

三:Runloop对象:

iOS中有两套API来冯访问Runloop对象

  1.Foundation(ObjC) ----- NSRunloop

  NSRunloop 其实就是 CFRunloopRef基于OC的包装对象。

 

  2.Core Foundation -------CFRunloopRef

四:Runloop与线程

  1.每一个线程都有唯一一个RunLoop对象

  2.主线程的RunLoop是创建好的,子线程的需要主动创建

  3.RunLoop在第一次获取时创建,在线程结束时销毁

五:获得RunLoop对象

  1.RunLoop对象都是采用懒加载的模式来创建的,即获取时才会创建

  2.Foundation框架中的NSRunLoop对象创建:

[NSRunLoop mainRunLoop]; //获得主线程的RunLoop对象。 [NSRunLoop currentRunLoop];// 获得当前线程的RunLoop对象,需要注意的是,如果新开辟了线程而没有调用此方法时,当前子线程的RunLoop对象是没有被创建的。

  3.Core Foundation框架中的CFRunLoopRef对象创建:

CFRunLoopGetCurrent();// 获得当前线程的RunLoop对象。 CFRunLoopGetMain(); // 获得主线程的RunLoop对象。

  4.可以在苹果官方的源码中看出,RunLoop与对应的线程是存在字典中的,key就是对应的线程。

六:RunLoop相关类

  1.Core Foundation中关于RunLoop的五个类

  1.1CFRunLoopRef

  1.2CFRunLoopModeRef

  1.3CFRunLoopSourceRef

  1.4CFRunLoopTimerRef

  1.5CFRunLoopObserverRef

  2.关系如图:

  需要注意的是,如果RunLoop中没有这些类,它将直接被销毁。

 

转载于:https://www.cnblogs.com/BJTUzhengli/p/5146739.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)