浅谈一下对runloop的理解

一 什么是RunLoop?

从字面意思看就是运行循环,其实内部就是do-while循环,这个循环内部不断地处理各种任务(比 如Source,Timer,Observer)

一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(run方法)

RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Source,Timer,Observer,那么就直接退出RunLoop

二 你在开发过程中怎么使用RunLoop?什么应用场景?

开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程发来的消息,处理其他事件)

在子线程中开启一个定时器

在子线程中进行一些长期监控

可以控制定时器在特定模式下运行

可以让某些事件(行为,任务)在特定模式下执行

可以添加observer监听RunLoop的状态,比如监听点击事件的处理(比如在所有点击事件前做一些处理)

//下面用代码来介绍runloop在线程中的运用

我们的目的是开辟一个子线程处理一些事件,然后将另一件事也放到第一个线程中处理

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic,strong)NSThread*thread;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UIButton*but1=[UIButton buttonWithType:UIButtonTypeSystem];

[but1 setFrame:CGRectMake(50, 50, 40, 30)];

[but1 setBackgroundColor:[UIColor blueColor]];

[but1 addTarget:self action:@selector(text1) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:but1];

UIButton*but12=[UIButton buttonWithType:UIButtonTypeSystem];

[but12 setFrame:CGRectMake(120, 50, 30, 30)];

[but12 setBackgroundColor:[UIColor redColor]];

[but12 addTarget:self action:@selector(text12) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:but12];

}

-(void)text1

{

NSLog(@"%@",[NSThread currentThread]);

self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(text2) object:nil];

[self.thread start];

}

-(void)text2

{

//获得当前子线程对应的runloop,也就是说一个进程的开始就会开启一个runloop对象,对于子线程的runloop对象是需要手动开启的,需要调用run方法;

NSRunLoop*runloop=[NSRunLoop currentRunLoop];

NSLog(@"2%@",[NSThread currentThread]);

//runloop的作用是为了保证线程的存活,这里的 NSTimer是保证runloop不退出,若没有runloop的运行模式的话,这个runloop就会自动退出,

//    //1第一种方法加定时器

//    NSTimer*timer=[NSTimer timerWithTimeInterval:2 target:self selector:@selector(too1 ) userInfo:nil repeats:YES];

//    [runloop addTimer:timer forMode:NSDefaultRunLoopMode];

//

//2.给runloop加一个端口,保证runloop不退出

[runloop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];

[runloop run];

}

//点击第二个红色按钮后继续让第一个线程继续工作

-(void)text12

{

[self performSelector:@selector(text13) onThread:self.thread withObject:nil waitUntilDone:YES];//为了将其他的事件也在上一个线程中来执行,那么我们对上一个线程做了一个存活的处理,所以利用runloop来保证线程的存活,不让其退出;

}

-(void)text13

{

NSLog(@"13%@",[NSThread currentThread]);

}

时间: 2024-11-12 08:20:27

浅谈一下对runloop的理解的相关文章

【转载】李航博士的《浅谈我对机器学习的理解》 机器学习与自然语言处理

李航博士的<浅谈我对机器学习的理解> 机器学习与自然语言处理 [日期:2015-01-14] 来源:新浪长微博  作者: 李航 [字体:大 中 小] 算算时间,从开始到现在,做机器学习算法也将近八个月了.虽然还没有达到融会贯通的地步,但至少在熟悉了算法的流程后,我在算法的选择和创造能力上有了不小的提升.实话说,机器学习很难,非常难,要做到完全了解算法的流程.特点.实现方法,并在正确的数据面前选择正确的方法再进行优化得到最优效果,我觉得没有个八年十年的刻苦钻研是不可能的事情.其实整个人工智能范畴

浅谈元类(个人理解)

浅谈元类(个人理解) 我们知道在python中一切皆对象(object),那么所以有的对象都成了object的子类,那么object类又是由谁创建的呢? 实际上,能够创建类的类,叫元类.还有一个概念就是:元类创建了object类,同时又是object类的子类(这是什么鬼?我们就不去考虑这个逻辑了,已经完美解决了先有鸡还是先有蛋的问题了). 元类实际还是所有类的创建者,即使所有类(包括元类自己)都是object的子类,他们的关系如下: Interesting...... 原文地址:https://

10 浅谈 装饰器模式的理解与使用

在不改变现有类结构的情况下,为这个类添加一个新的功能,这就是装饰器模式 所属与结构型模式, 这种模式的特点是:需要创建一个装饰类来包装原有的类,并且提供额外的功能. 为了解决:平时使用继承的方式,会带入许多静态的方法,导致子类过度饱和,膨胀. 举例子:悟空拥有七十二变,不管它怎么变化,他的本质还是一只猴子,但是他又有变化后的一些本领(功能) 实现:装饰类包含原有类的实例对象,即可实现装饰器模式 开始: 定义一个形状的接口 //画图接口 public interface Shape { void

浅谈对差分隐私的理解

在听完第五组的报告之后,浅谈一下对差分隐私的认识,主要针对差分隐私的思想做一个大致的梳理. 为什么会产生差分隐私? 由于有些“聪明”的用户为了知道某些信息,可以通过两次查询结果的差异进行对比,从而在两次数据的对比中找到有用的信息.正如在杨顼组的报告中提到的查询二等兵约瑟夫阿伦是否阵亡的信息,可以通过查询D5和D6两次数据结果,将两次数据结果进行对比就可以知道约瑟夫阿伦是否阵亡的消息. 差分隐私的主要思想: 差分隐私是基于噪音的安全计算方法,它的思想是:对计算过程用噪音干扰,让原始数据淹没在噪音中

浅谈对闭包(Closure)的理解

在理解闭包前理解JavaScript的作用域是有必要的,如果有兴趣,请移步"对JavaScript作用域的认识" 什么是闭包 闭包就是指有权访问另一个函数作用域中变量的函数,通俗点讲闭包就是能够读取其他函数变量的函数.创建闭包的常见方式,就是在一个函数内部创建另一个函数. 1 function fn1() { 2 var a = 1 ; 3 function fn2() { 4 alert(a); 5 } 6 return fn2; 7 } 8 9 var result = fn1()

浅谈我对机器学习的理解

算算时间,从开始到现在,做机器学习算法也将近八个月了.虽然还没有达到融会贯通的地步,但至少在熟悉了算法的流程后,我在算法的选择和创造能力上有了不小的提升.实话说,机器学习很难,非常难,要做到完全了解算法的流程.特点.实现方法,并在正确的数据面前选择正确的方法再进行优化得到最优效果,我觉得没有个八年十年的刻苦钻研是不可能的事情.其实整个人工智能范畴都属于科研难题,包括模式识别.机器学习.搜索.规划等问题,都是可以作为独立科目存在的.我不认为有谁可以把人工智能的各个方面都做到极致,但如果能掌握其中的

浅谈对ionic项目的理解

在思考怎么将客户端app连接到服务器的时候,就在想ionic项目的本质是什么,一开始因为ionic serve这一命令,我以为它自己就是个服务器,但是后来一细想又感觉不是这样,不然客户端又该怎么和服务端进行交互呢?而ionic本质正好验证了我的猜想. 通过ionic info我们可以发现ionic项目所需环境如下: Your system information: ordova CLI: 6.4.0 Ionic CLI Version: 2.1.17 Ionic App Lib Version:

李航博士:浅谈我对机器学习的理解

原文:http://www.itongji.cn/article/06294DH015.html 机器学习方法非常多,也很成熟.下面我挑几个说. 首先是SVM.因为我做的文本处理比较多,所以比较熟悉SVM.SVM也叫支持向量机,其把数据映射到多维空间中以点的形式存在,然后找到能够分 类的最优超平面,最后根据这个平面来分类.SVM能对训练集之外的数据做很好的预测.泛化错误率低.计算开销小.结果易解释,但其对参数调节和核函数的参 数过于敏感.个人感觉SVM是二分类的最好的方法,但也仅限于二分类.如果

浅谈对增长黑客的理解

Growth hacker是2010硅谷提出来的, 线上有很多相关的文章, 国内也有范冰出的一本同名书籍, 知乎上也有不少讨论. 我在这里只说一下, 自己对growth hacking的肤浅理解. 首先是字面上的理解, growth hacking. growth是目标, hacking是手段和方法, 可以翻译成“破解”. 通过hacking手段实现怎长目标的人被叫做growth hacker.  以前能够破解软件, 攻陷网站,拿下root权限的人被叫做黑客hacker.我多年前也做过黑客, 拿