一:Runloop基本知识

1.本质就是运行循环

2.基本作用:

2.1保证程序持续运行

2.2处理APP中的各种事件:触摸,定时器,selector...

2.3节省CPU资源,系统程序性能:它会让主线程在工作时工作,非工作时休息。

2.4....

二:main函数中的Runloop

1.

 int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

2.第三行中的UIApplicationMain函数内部就启动了一个Runloop.

也就说,UIApplicationMain函数一直没有返回,保证了程序的持续运行。

3.这个启动的Runloop启动后默认是和主线程相关联的。

三:Runloop对象:

iOS中有两套API来冯访问Runloop对象

1.Foundation(ObjC) ----- NSRunloop

NSRunloop 其实就是 CFRunloopRef基于OC的包装对象。

2.Core Foundation -------CFRunloopRef

四:Runloop与线程

1.每一个线程都有唯一一个RunLoop对象

2.主线程的RunLoop是创建好的,子线程的需要主动创建

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

五:获得RunLoop对象

1.RunLoop对象都是采用懒加载的模式来创建的,即获取时才会创建

2.Foundation框架中的NSRunLoop对象创建:

    [NSRunLoop mainRunLoop];  //获得主线程的RunLoop对象。

    [NSRunLoop currentRunLoop];// 获得当前线程的RunLoop对象,需要注意的是,如果新开辟了线程而没有调用此方法时,当前子线程的RunLoop对象是没有被创建的。

3.Core Foundation框架中的CFRunLoopRef对象创建:

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

    CFRunLoopGetMain();  // 获得主线程的RunLoop对象。

4.可以在苹果官方的源码中看出,RunLoop与对应的线程是存在字典中的,key就是对应的线程。

六:RunLoop相关类

1.Core Foundation中关于RunLoop的五个类

1.1CFRunLoopRef

1.2CFRunLoopModeRef

1.3CFRunLoopSourceRef

1.4CFRunLoopTimerRef

1.5CFRunLoopObserverRef

2.关系如图:

需要注意的是,如果RunLoop中没有这些类,它将直接被销毁。

2016 - 1 - 20 runloop学习的更多相关文章

  1. 2016 - 1 - 20 runloop学习(2)

    一:CFRunLoopModeRef 1. CFRunLoopModeRef带表RunLoop的运行模式 2. 一个Runloop可以有若干个mode,每个mode又包含若干个sourse,timer ...

  2. Stack Overflow 2016年度 20个最佳Python问题(一)

    Stack Overflow 2016年度 20个最佳Python问题(一) https://zhuanlan.zhihu.com/p/25020763

  3. 2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)

    首先祝自己生日快乐~23咯~ 一  autorelease的概念 autorelease会像C语言的自动变量那样来对待对象实例.当超出作用域(相当于变量作用域)时,对象的实例release实力方法被调 ...

  4. RunLoop学习总结

    开始 很久之前就看了一次YY的文章,没看懂.后来又看了sunny的视频和叶孤城的直播的视频,找了很多资料,对RunLoop也越来越清晰,然后又看了两三次YY的文章,虽然还没完全看懂,不得不说写的非常好 ...

  5. 北京工业大学耿丹学院2016下C作业学习总结

    北京工业大学耿丹学院2016下C的班级地址在https://edu.cnblogs.com/campus/bjgygd/Sixteen-One . 第一次作业:两部分 第一部分:新建博客,书写第一篇随 ...

  6. Hitcon 2016 Pwn赛题学习

    PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...

  7. [New Learn] RunLoop学习-官方译文

    Run Loops Run loops是线程的一个基本构成部分.一个run loop 是一个事件处理循环,你可以使用它来处理线程收到的事件.设计run loop的目的就是可以使得线程在收到事件的时候处 ...

  8. 我的runloop学习笔记

    前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...

  9. 从零开始HTML(二 2016/9/20)

    1.布局 ① 使用 <div> 元素的 HTML 布局,<div> 元素常用作布局工具,因为能够轻松地通过 CSS 对其进行定位. <!DOCTYPE html> ...

随机推荐

  1. Mybatis那一大堆事儿--1

    <select id="listAmPerfTime" resultType="Date"> SELECT pam.perf_time AS per ...

  2. javascript图片切换

    JavaScript 图片滑动切换效果 作者:cloudgamer 时间: 2009-09-25 文档类型:原创 来自:蓝色理想 第 1 页 JavaScript 图片滑动切换效果 [1] 第 2 页 ...

  3. JavaWeb基础:Servlet

    Servlet 基本概念 Servlet是Sun公司提出的一种用于开发动态Web资源的技术规范: Servlet是一个Java接口, 用户想要开发自定义的Servlet可以通过以下步骤: 编写实现Se ...

  4. hdu---(2604)Queuing(矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. IOS-错误总结

    1,警告:"xoxoxoxo"  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可.2,警告:Declaration of " ...

  6. placehold.it-在线图片生成器(转载)

    做网站的时候 如果 有的产品等客户没有上传图片,可以用这个网站生成的图片 并配以文字进行图片的占位 以免造成页面的空挡或者页面错位等 原文地址:http://www.cnblogs.com/xumen ...

  7. js判断手机系统和微信

    //判断手机浏览器 var ua = navigator.userAgent; var ipad = ua.match(/(iPad).*OS\s([\d_]+)/), isIphone = !ipa ...

  8. IoTimerInLineHook

    #ifndef CXX_IOTIMERINLINEHOOK_H # include "IoTimerInlineHook.h" #endif ULONG32 SSDT_NtOpen ...

  9. js打印对象(object)

    function printObject(obj){//obj = {"cid":"C0","ctext":"区县"}; ...

  10. 重写 button 的创建方法

    重写 button 的创建方法 //sxc时时改变 // self.videoM.progress = progress; // if ([self.videoM.downloadStr isEqua ...