iOS学习笔记-136.RunLoop04——Runloop相关类2_CFRunLoopModeRef

RunLoop04——Runloop相关类2_CFRunLoopModeRef

一、CFRunLoopModeRef 说明

CFRunLoopModeRef代表RunLoop的运行模式

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

  2. Runloop要想跑起来,它的内部必须要有一个mode,这个mode里面必须有source\observer\timer,至少要有其中的一个。

  3. 每次RunLoop启动时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode

  4. 如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入

  5. 这样做主要是为了分隔开不同组的Source/Timer/Observer,让其互不影响


二、CFRunLoopModeRef 系统默认注册的5个Mode

系统注册的mode说明
kCFRunLoopDefaultModeApp的默认Mode,通常主线程是在这个Mode下运行
UITrackingRunLoopMode界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响
UIInitializationRunLoopMode在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用
GSEventReceiveRunLoopMode接受系统事件的内部 Mode,通常用不到
kCFRunLoopCommonModes这是一个占位用的Mode,不是一种真正的Mode

三、代码示例

我们首先在界面上 拖拽一个 UITextView控件。其次代码如下

//
//  ViewController.m
//  03_UIView92_NSRunLoop相关类
//
//  Created by 杞文明 on 17/9/10.
//  Copyright © 2017年 杞文明. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<UITextViewDelegate>
@property (weak, nonatomic) IBOutlet UITextView *textView;

@end

@implementation ViewController

-(void)viewDidLoad{
    self.textView.delegate = self;
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"%@",[NSRunLoop currentRunLoop].currentMode);
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"%@----",[NSRunLoop currentRunLoop].currentMode);
}

@end

四、图示

这里写图片描述


五、结果与分析

2017-09-10 20:49:26.539 03_UIView92_NSRunLoop相关类[31052:182353] kCFRunLoopDefaultMode
2017-09-10 20:49:28.686 03_UIView92_NSRunLoop相关类[31052:182353] kCFRunLoopDefaultMode----
2017-09-10 20:49:28.703 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----
2017-09-10 20:49:28.723 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----
2017-09-10 20:49:28.747 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----
2017-09-10 20:49:28.786 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----
2017-09-10 20:49:28.857 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----
2017-09-10 20:49:28.875 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----
2017-09-10 20:49:28.899 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----
2017-09-10 20:49:28.916 03_UIView92_NSRunLoop相关类[31052:182353] UITrackingRunLoopMode----

我们可以看到原本程序是运行在 kCFRunLoopDefaultMode 这种模式下的,我们滚动 UITextView 以后,

就从 kCFRunLoopDefaultMode 变成了 UITrackingRunLoopMode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值