您的位置:首页 > 移动开发 > IOS开发

iOS开发之多线程入门 及NSThread

2015-09-16 16:31 330 查看
一、多线程入门须知
1⃣️、当用户下载资源、进行图像处理、耗时数据处理等任务的时候
往往希望操作这个任务的时候 其他的操作不会被中断
这时候,就用到了多线程
2⃣️、在单线程中一个线程只能执行一个任务,一个任务处理不完另一个任务就不能开始,这样会影响用户的体验,让用户感觉APP卡顿。现在苹果手机都是多核处理器,这样我们可以把一个任务分成多个步骤,在不要求顺序的情况下
使用多线程既能解决线程阻塞 增加用户体验又能
充分利用多核处理器运行能力
3⃣️、每个应用程序的内部,存在一个或者多个执行线程,他同时或几乎同时执行不同的操作
4⃣️重要 面试题:
什么是进程,什么是线程,什么是多线程?
1、 线程与进程:每个系统运行的程序都是一个进程,每个进程里面包含了一个或者多个线程

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

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

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

5⃣️、iOS
中几种多线程方式
iOS中有3种多线程策略供开发者使用
:NSThread、NSOperation(基类不可以直接使用
只能使用它的子类)、GCD(Grand 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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: