iOS学习笔记-138.RunLoop06——Runloop相关类4_ CFRunloopSourceRef和CFRunLoopObserverRef
来源:互联网 发布:linux 嵌入式 播放器 编辑:程序博客网 时间:2024/05/16 05:34
- RunLoop06Runloop相关类4_ CFRunloopSourceRef和CFRunLoopObserverRef
- 一CFRunloopSourceRef
- 二CFRunLoopObserverRef
- 1 如何监听
- 2 代码示例
- 3 CFRunLoopActivity
- 4 图示
- 5 运行结果
RunLoop06——Runloop相关类4_ CFRunloopSourceRef和CFRunLoopObserverRef
一、CFRunloopSourceRef
1.是事件源也就是输入源,有两种分类模式;
一种是按照苹果官方文档进行划分的
另一种是基于函数的调用栈来进行划分的(source0和source1)。
2.具体的分类情况
(1)以前的分法
Port-Based SourcesCustom Input SourcesCocoa Perform Selector Sources
(2)现在的分法
Source0:非基于Port的(用户主动出发的)Source1:基于Port的(系统内部的消息事件)
3.可以通过打断点的方式查看一个方法的函数调用栈
二、CFRunLoopObserverRef
CFRunLoopObserverRef是观察者,能够监听RunLoop的状态改变
2.1 如何监听
//创建一个runloop监听者CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(),kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) { NSLog(@"监听runloop状态改变---%zd",activity);});//为runloop添加一个监听者CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);CFRelease(observer);
2.2 代码示例
//// ViewController.m// 03_UIView93_ CFRunloopObserverRef和CFRunloopSourceRef//// Created by 杞文明 on 17/9/11.// Copyright © 2017年 杞文明. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController-(void)viewDidLoad{ [self observerCreate];}- (IBAction)btnClick:(id)sender { NSLog(@"----%s",__func__);}-(void)observerCreate{ //1.创建监听者 /* 第一个参数:怎么分配存储空间 第二个参数:要监听的状态 。kCFRunLoopAllActivities 所有的状态 第三个参数:是否持续监听 第四个参数:优先级 总是传0 第五个参数:当状态改变时候的回调 */ CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) { switch (activity) { case kCFRunLoopEntry: NSLog(@"即将进入runloop"); break; case kCFRunLoopBeforeTimers: NSLog(@"即将处理timer事件"); break; case kCFRunLoopBeforeSources: NSLog(@"即将处理source事件"); break; case kCFRunLoopBeforeWaiting: NSLog(@"即将进入睡眠"); break; case kCFRunLoopAfterWaiting: NSLog(@"被唤醒"); break; case kCFRunLoopExit: NSLog(@"runloop退出"); break; default: break; } }); //2.添加监听者 /* 第一个参数:要监听哪个runloop 第二个参数:观察者 第三个参数:运行模式 */ CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);}@end
2.3 CFRunLoopActivity
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) { kCFRunLoopEntry = (1UL << 0), 即将进入runloop kCFRunLoopBeforeTimers = (1UL << 1), 即将处理timer事件 kCFRunLoopBeforeSources = (1UL << 2), 即将处理source事件 kCFRunLoopBeforeWaiting = (1UL << 5), 即将进入睡眠 kCFRunLoopAfterWaiting = (1UL << 6), 被唤醒 kCFRunLoopExit = (1UL << 7), runloop退出 kCFRunLoopAllActivities = 0x0FFFFFFFU};
2.4 图示
2.5 运行结果
[74454:384907] 被唤醒[74454:384907] 即将处理timer事件[74454:384907] 即将处理source事件[74454:384907] 即将处理timer事件[74454:384907] 即将处理source事件[74454:384907] 即将处理timer事件[74454:384907] 即将处理source事件[74454:384907] 即将处理timer事件[74454:384907] 即将处理source事件[74454:384907] 即将进入睡眠[74454:384907] 被唤醒[74454:384907] 即将处理timer事件[74454:384907] 即将处理source事件[74454:384907] 即将处理timer事件[74454:384907] 即将处理source事件[74454:384907] -----[ViewController btnClick:][74454:384907] 即将处理timer事件[74454:384907] 即将处理source事件[74454:384907] 即将进入睡眠
阅读全文
0 0
- iOS学习笔记-138.RunLoop06——Runloop相关类4_ CFRunloopSourceRef和CFRunLoopObserverRef
- CFRunLoopSourceRef、CFRunLoopObserverRef
- iOS学习笔记-135.RunLoop03——Runloop相关类1_基础
- iOS学习笔记-136.RunLoop04——Runloop相关类2_CFRunLoopModeRef
- iOS学习笔记12—Runloop
- iOS学习笔记12—Runloop
- iOS学习笔记—Runloop 经典讲解
- iOS学习笔记12—Runloop
- iOS学习笔记-137.RunLoop05——Runloop相关类3_CFRunLoopTimerRef(NSTimer)为何定时有时会失败
- iOS Runloop学习笔记
- iOS-RunLoop学习笔记
- iOS学习笔记-134.RunLoop02——Runloop与线程
- iOS学习笔记-139.RunLoop07——Runloop处理流程
- iOS 学习笔记 --- RunLoop基础
- 《iOS开发笔记—运行循环RunLoop》
- iOS学习笔记-140.RunLoop08——Runloop应用之常驻线程
- 多线程学习笔记4-RunLoop
- iOS进阶必须学习的知识点之——Runloop
- 计算2/1,3/2,5/3,8/5,13/8,21/13……前n项的和(仅用于讨论)
- 聊天记录删除后的恢复方法汇总
- Java transient关键字使用小记
- 由sudo 为何提示找不到命令说起
- 吾爱破解160个crackme之014
- iOS学习笔记-138.RunLoop06——Runloop相关类4_ CFRunloopSourceRef和CFRunLoopObserverRef
- 2017 ACM/ICPC Asia Regional Shenyang Online
- python3中简单的异常捕获及显示堆栈调用
- 官方发生的国防生的
- PAT-B] 1014. 福尔摩斯的约会 [字符串处理]
- TCP/IP协议
- tcp/ip三次握手,四次分手
- Dom节点的操作
- java学习初探十二之常用类_数字_随机数_枚举