iOS开发之多线程入门 及NSThread

一、多线程入门须知

1⃣️、当用户下载资源、进行图像处理、耗时数据处理等任务的时候  往往希望操作这个任务的时候 其他的操作不会被中断 这时候,就用到了多线程

2⃣️、在单线程中一个线程只能执行一个任务,一个任务处理不完另一个任务就不能开始,这样会影响用户的体验,让用户感觉APP卡顿。现在苹果手机都是多核处理器,这样我们可以把一个任务分成多个步骤,在不要求顺序的情况下 使用多线程既能解决线程阻塞 增加用户体验又能 充分利用多核处理器运行能力 

3⃣️、每个应用程序的内部,存在一个或者多个执行线程,他同时或几乎同时执行不同的操作

4⃣️重要 面试题: 什么是进程,什么是线程,什么是多线程?

     1、 线程与进程:每个系统运行的程序都是一个进程,每个进程里面包含了一个或者多个线程


  2、 线程是一组指令的集合,程序中一个单一的顺序控制流程,是一个程序中独立运行的程序片段(一个应用程序里面,单一的顺序控制执行的一个任务)


     3、 程序运行后,系统会创建一个main 主线程的线程,所有的UI控件都必须运行在主线程里面,所以也有人叫它UI线程   。如果将所有的任务都放在主线程里面,就会造成UI阻塞


      4、多线程 在同一个应用程序内,同时运行多个线程,完成不同的工作,就叫做多线程


5⃣️、iOS 中几种多线程方式

 iOS中有3种多线程策略供开发者使用 NSThreadNSOperation(基类不可以直接使用 只能使用它的子类)GCDGrand Central Dispatch)  

   GCD 苹果推荐的一种实现 多线程的方式


6⃣️、轻量级 : 对系统框架的依赖性的程度

 NSThread 是这三种策略里面相对轻量级的,需要自己去管理它的生命周期,以及线程之间的同步,线程共享同一应用程序的部分内存空间,他们拥有对数据相同的访问权限,所以得协调多个线程对同一数据的访问,常用的做法是在访问之前加锁,这会导致一定的性能开销


二、NSThread 详解


设置一个白色小背景图,我们通过点击手势改变白色背景图的位置为点击的位置,设置一个button,当我们点击button时下载一张网络图片,作为小背景图的图片,在下载的过程中我们无法再次点击背景图,只有当下载完成后才能再次点击背景图。这时,我们为了让操作同步进行不影响,采用 多线程NSThread





1⃣️、在我们点击下载button后触发一个方法


  • (void)downLoadImage
  • {


NSThread *thread2 = [[NSThread alloc]initWithTarget:self selector:@selector(downLoadOperation) object:nil];


    thread2.name = @"下载图片线程2";

    

    [thread2 start];

    

//    多个线程同时访问 一个数据


    NSThread *thread3 = [[NSThread alloc]initWithTarget:self selector:@selector(downLoadOperation) object:nil];


    thread3.name = @"下载图片线程3";

    

    [thread3 start];


  • }



  • 2⃣️、线程触发的方法


  • (void)downLoadOperation{

NSLog(@"下载线程:%@",[NSThread currentThread]);

    

//    模拟 下载 耗时的操作


    sleep(5);

    

//    当操作完成后,刷新Ui 在主线程里面去刷新


//    从子线程回到主线程 去刷新UI界面


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


    point.backgroundColor = [UIColor brownColor];



}





3⃣️、下载完成后,到主线程刷新

- (void)updateUI

{

    NSLog(@"当前线程:%@",[NSThread currentThread]);

    point.backgroundColor = [UIColor brownColor];

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值