初识RunLoop

  • 初识RunLoop

  • 1.RunLoop的作用

    • A 保持程序的持续运行(ios程序为什么能一直活着不会死)

    • B 处理App中的各种事件(触摸、定时事件、selector事件....)

    • C 节省CPU资源,提高程序性能,有事件就处理事件,没有就休息

  • 2.RunLoop的重要说明、重要说明、重要说明

    • 1. 如果没有RunLoop,那么程序已启动就会退出,什么事情都做不了

    • 2. 如果没有RunLoop,那么相当于在内部有一个死循环,能够保持程序持续运行

    • 3. main函数中的RunLoop
      • 在UIAPPlication函数内部就启动了一个RunLoop,该函数返回一个int类型的值
      • 这个默认启动的RunLoop是跟主线程相关
  • 3.RunLoop的API

    • 1. 在iOS开发中有两套api来访问Runloop
      • a.foundation框架【NSRunloop】
      • b.core foundation框架【CFRunloopRef】
- #####2. NSRunLoop和CFRunLoopRef都代表着RunLoop对象,它们是等价的,可以互相转换
- #####3. NSRunLoop是基于CFRunLoopRef的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API(Core Foundation层面)
  • 4.RunLoop与线程

    • 1.Runloop和线程的关系:一个Runloop对应着一条唯一的线程

      • 问题:如何让子线程不死

      • 回答:给这条子线程开启一个Runloop

    • 2.Runloop的创建:主线程Runloop已经创建好了,子线程的runloop需要手动创建

    • 3.Runloop的生命周期:在第一次获取时创建,在线程结束时销毁

  • 5.获取RunLoop

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //获得主线程对应的runloop
    NSRunLoop *mainRunLoop = [NSRunLoop mainRunLoop];
    //获取当前线程对应的runloop
    NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
    
    NSLog(@"%p---%p",mainRunLoop,currentRunLoop);
    /**
     Runloop和线程的关系
     一一对应的关系,主线程runloop已经创建,但是子线程的需要手动创建
     */
   NSThread *thread =  [[NSThread alloc]initWithTarget:self selector:@selector(runLoop) object:nil];
    [thread start];
}
-(void)runLoop
{   //创建子线程对应的runloop,currentRunLoop是懒加载的
    NSLog(@"%@",[NSRunLoop currentRunLoop]);
    NSLog(@"run---%@",[NSThread currentThread]);
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容