2016 - 1 - 20 runloop学习
一: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学习的更多相关文章
- 2016 - 1 - 20 runloop学习(2)
一:CFRunLoopModeRef 1. CFRunLoopModeRef带表RunLoop的运行模式 2. 一个Runloop可以有若干个mode,每个mode又包含若干个sourse,timer ...
- Stack Overflow 2016年度 20个最佳Python问题(一)
Stack Overflow 2016年度 20个最佳Python问题(一) https://zhuanlan.zhihu.com/p/25020763
- 2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)
首先祝自己生日快乐~23咯~ 一 autorelease的概念 autorelease会像C语言的自动变量那样来对待对象实例.当超出作用域(相当于变量作用域)时,对象的实例release实力方法被调 ...
- RunLoop学习总结
开始 很久之前就看了一次YY的文章,没看懂.后来又看了sunny的视频和叶孤城的直播的视频,找了很多资料,对RunLoop也越来越清晰,然后又看了两三次YY的文章,虽然还没完全看懂,不得不说写的非常好 ...
- 北京工业大学耿丹学院2016下C作业学习总结
北京工业大学耿丹学院2016下C的班级地址在https://edu.cnblogs.com/campus/bjgygd/Sixteen-One . 第一次作业:两部分 第一部分:新建博客,书写第一篇随 ...
- Hitcon 2016 Pwn赛题学习
PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...
- [New Learn] RunLoop学习-官方译文
Run Loops Run loops是线程的一个基本构成部分.一个run loop 是一个事件处理循环,你可以使用它来处理线程收到的事件.设计run loop的目的就是可以使得线程在收到事件的时候处 ...
- 我的runloop学习笔记
前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...
- 从零开始HTML(二 2016/9/20)
1.布局 ① 使用 <div> 元素的 HTML 布局,<div> 元素常用作布局工具,因为能够轻松地通过 CSS 对其进行定位. <!DOCTYPE html> ...
随机推荐
- Leetcode--Add two number
地址:https://leetcode.com/problems/add-two-numbers/ 代码: class Solution { public: ListNode* addTwoNumbe ...
- Qt之QCustomPlot(图形库)
简述 QCustomPlot是一个基于Qt C++的图形库,用于绘制和数据可视化 - 制作漂亮的2D图 - 曲线图.趋势图.坐标图.柱状图等,并为实时可视化应用程序提供高性能服务.它没有进一步的依赖关 ...
- Spring配置文件解析--依赖注入
1.构造器注入基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个依赖.此外,还可通过给stattic工厂方法传参数来构造bean.构造器参数解析根据参数类型进行匹配,如果bean的构造器 ...
- struts2视频学习笔记 24-27(国际化)
课时24 配置国际化全局资源文件.输出国际化信息 1.准备资源文件,添加到src目录下,资源文件的命名格式如下:baseName_language_country.propertiesbaseName ...
- synchronized和static synchronized的比较
群里讨论的一个问题,网上别人已经贴出了很详细的说明,这里补充记录下,后面加入个人测试代码. 起因:1月份的时候看群里讨论一道问题,问题内容如下: 一个日本作者-结成浩的<java多线程设计模式& ...
- CentOS 常用命令大全
下面,就给大家介绍这些CentOS常用命令. 一:使用CentOS常用命令查看cpu more /proc/cpuinfo | grep "model name" grep &qu ...
- JBOss启动只能在本机访问的解决办法
环境CentOS6.4_X64 JBoss:5.1.2 eap 启动:JBOSS_HOME/bin/run.sh 在本机可以通过http://localhost:8080访问,而其他机器无论是通过机器 ...
- checkbox 赋值给js 变量
var banuid =[];//定义一个数组 $('input[name="banuid[]"]:checked').each(function(){//遍 ...
- 百度上传android包:应用名解析失败!
manifest 里面<application增加android:label="@string/app_name"
- 二模 (5) day2
第一题: 有 N 个人顺时针围在一圆桌上开会,他们对身高很敏感. 因此决定想使得任意相邻的两人的身高差距最大值最小. 如果答案不唯一,输出字典序最小的排列,指的是身高的排列.N<=50 解题过程 ...