iOS——Runloop推荐

概述

1、Runloops和线程:
Runloops是线程的底层基础,它的本质是线程中运行着的循环!
2、一个Runloop:
是一个事件处理的循环,用来不停的调度工作以及处理输入事件。
3、使用run loop的目的:
是让线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。
4、Run loop的管理并不完全自动的。
5、Cocoa 和 CoreFoundation 框架中各有完整的一套关于 runloop 对象的操作api.

Runloop中必须知道的概念

1、RunloopModes Runloop运行的模式
2、RunLoop 的事件源
|---异步的inputSources
|---|---Port-Based Sources 基于端口的输入源
|---|--- Custom Input sources. 自定义输入源
|---同步的timerSources
3、RunLoop Observers, RunLoop 运行过程中的状态观察者

Runloop配置使用

Cocoa框架

// 获取当前runloop
NSRunLoop* myRunLoop = [NSRunLoop currentRunLoop];
NSDate* futureDate = [NSDate dateWithTimeIntervalSinceNow:1.0];
// 创建时间源
NSTimer* myTimer = [[NSTimer alloc] initWithFireDate:futureDate                         interval:0.1  target:self  selector:@selector(myDoFireTimer1:)                         userInfo:nil   repeats:YES]; 
// 将时间源添加到runloop中,并设置runloopMode
[myRunLoop addTimer:myTimer forMode:NSDefaultRunLoopMode];


// 该方法会自动将生成的timer事件源添加到当前线程的runloop中,runloopMode是默认的NSDefaultRunLoopMode
[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(myDoFireTimer2:)  userInfo:nil repeats:YES];

CoreFoundation 框架

// 获取当前runloop
CFRunLoopRef runLoop = CFRunLoopGetCurrent(); 
// 获取上下文结构
CFRunLoopTimerContext context = {0, NULL, NULL, NULL, NULL};  
// 创建定时器
CFRunLoopTimerRef timer = CFRunLoopTimerCreate(kCFAllocatorDefault, 0.1, 0.3, 0, 0,  &myCFTimerCallback, &context); 
// 将定时器添加进runloop中
CFRunLoopAddTimer(runLoop, timer, kCFRunLoopCommonModes);

苹果开发者文档:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

翻看了几份文档翻译,发现还是这个最好!
首选推荐:http://www.jianshu.com/p/8e40a7b16357
这位大神同一个系列的学习笔记推荐,!

这份翻译是完全根据开发文档翻译过来的,可以参考这个,同时对照开发文档自己翻译一份!
http://www.cocoachina.com/ios/20170407/18998.html

你可能感兴趣的:(iOS——Runloop推荐)