Runloop?

1.何为runloop,有什么用?

runloop 就是一个运行循环,用于保持程序的持续运行,处理各种事件(触摸事件,定时器等),节省cpu资源,提高性能(要让马儿跑,还要马儿不吃草)

2.runloop的用法?

oc中有两套API可以访问和使用runloop

(1)Foundation

NSRunloop

//获取当前线程的runloop

[NSRunloop currentRunloop];

//获取主前程的runloop

[NSRunloop mainRunloop];

(2)Core Foundation

CFRunloopRef

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

3.线程与runloop

(1).每条线程都有唯一的与之对应的RunLoop对象。

(2).主线程的RunLoop已经创建好了,而子线程的需要手动创建。(也就是说子线程的RunLoop默认是关闭的,因为有时候开了个线程但却没有必要开一个RunLoop,不然反而浪费了资源。 )

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

4.RunLoop相关类

CFRunLoopRef                //

CFRunLoopModeRef      //RunLoop的运行模式。

CFRunLoopSourceRef

CFRunLoopTimerRef

CFRunLoopObserverRef

1.CFRunLoopModeRef代表的是RunLoop的运行模式。

2.一个 RunLoop 包含若干个 Mode,每个 Mode 又包含若干个 Source/Timer/Observer。

3.每次调用 RunLoop 的主函数时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode。 4.如果需要切换 Mode,只能退出 Loop,再重新指定一个 Mode 进入。这样做主要是为了分隔开不同组的 Source/Timer/Observer,让其互不影响。 

CFRunLoopModeRef

kCFRunLoopDefaultMode //App的默认Mode,通常主线程是在这个Mode下运行

UITrackingRunLoopMode //界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响

UIInitializationRunLoopMode // 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用

GSEventReceiveRunLoopMode // 接受系统事件的内部 Mode,通常用不到

kCFRunLoopCommonModes //这是一个占位用的Mode,不是一种真正的Mode  

5.使用runloop注意点

在NSTimer中使用runloop 是时的用法

- (IBAction)ButtonDidClick:(id)sender {

NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timerTest) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

}

- (void)timerTest {

NSLog(@"timerTest----");

}

在scrollview中使用runloop时的用法:使用NSRunLoopCommonModes

NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timerTest) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];


参考链接:https://www.jianshu.com/p/2d3c8e084205

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 Runloop机制原理 深入理解RunLoop http://www.cocoachina.com/ios/2...
    Kevin_Junbaozi阅读 9,607评论 4 30
  • 基本概念 进程 进程是指在系统中正在运行的一个应用程序,而且每个进程之间是独立的,它们都运行在其专用且受保护的内存...
    小枫123阅读 4,494评论 0 1
  • 一、什么是runloop 字面意思是“消息循环、运行循环”。它不是线程,但它和线程息息相关。一般来讲,一个线程一次...
    WeiHing阅读 12,546评论 11 111
  • 概述 RunLoop作为iOS中一个基础组件和线程有着千丝万缕的关系,同时也是很多常见技术的幕后功臣。尽管在平时多...
    阳明AI阅读 4,770评论 0 17
  • RunLoop的基本了解 **1 . RunLoop字面的意思 : **运行循环 / 跑圈 **2 . 基本作用 ...
    Mario_ZJ阅读 3,587评论 1 3

友情链接更多精彩内容