iOS 多线程小结 ---- (NSThread)

一 ) 为什么使用多线程?

         每个iOS应用程序都有个专门用来更新显示UI界面、处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验。一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法。
这里有两个概念是进程和线程。 进程就是负责程序运行的内存分配,而线程就是进程中得一个独立的执行那个路径。它是程序的执行路径,负责程序中代码的实际运行。这好比进程就是火车,线程就是火车的车厢,没有火车,车厢也跑不起来当然一个火车也不能只有一个车厢。

二) iOS 中常用的三种多线程是什么?

1 Thread: 这是相对轻量级别的,抽象级别相对来说比较低,但是需要管理线程的生命周期,同步以及加锁,这会导致一定的性能开销

2 Operations: 这个是基于OC实现的,以面向对象的方式封装了需要执行的操作,我们可以不必关心线程的管理和同步的问题。它可以开始,取消线程执行。他有两个默认的实现方法:NSInvocationOperation和NSBlockOperation。当然我们也可以自定NSOperations,只有实现里面的main方法即可

3 GCD:也是重点讲的一个,它是ios4才开始使用的,当然现在我们ios9都出来了,GCD的成熟度足可以让我们放心的使用,它是基于C实现的,性能上要相对来说好一些,而且可以用最简单的代码去实现复杂的线程问题。

三) NSThread的基本使用方法

1.动态初始化

 NSThread threadOne = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];

其中run是一个方法,我们通过方法来执行多线程中得处理
[_threadOne setName:@"one"]; 给线程初始化一个别名
[_threadOne start]; 开始执行

2 静态初始化

  [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; 

通过这一句代码我们就可以创建出另一个线程出来并去执行

3 创建隐式线程:

  [self performSelectorInBackground:@selector(run) withObject:nil];

注:这是NSObject的一个方法,他可以让一个耗时间的处理放入后台去执行,但是在swift中抛弃了,原因是苹果觉得这个方法是线程不安全的

4 获取当前的线程

  NSThread *current = [NSThread currentThread];

返回的是目前的线程

5 返回主线程(刷新UI控件必须在主线程中执行)

 [self performSelectorOnMainThread:@selector(main:) withObject:nil waitUntilDone:YES];

6 等待(暂停)当前的线程

[NSThread sleepForTimeInterval:3.0f] ;//3秒之后执行
或者

    NSDate *date = [NSDate dateWithTimeInterval:2 sinceDate:[NSDate date]];
    [NSThread sleepUntilDate:date];

等待date完成后再去执行
注:前者是等待时间的完成,后者是等待数据的完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值