线程简介
为什么要使用多线程
当用户在执行某项操作,比如上传图片,主线程会执行这个动作,直到上传结束后。主线程才会执行后面的操作,在这段时间内主线程处于忙碌状态,不会对用户的请求作出任何反应。这样的话会给用户一种很不好的体验,此时多线程的作用就体现出来了。
单线程和多线程的区别
- 单线程程序:只有一个线程即主线程,代码顺序执行,容易出现代码阻塞(页面假死)。
- 多线程程序:有多个线程,线程之间独立运行,能有效的避免代码阻塞,并提高程序的运行性能。
- 注意:iOS中关于UI的添加和刷新必须在主线程中操作。
多线程中的一些基本知识
- 进程:一个正在运行的程序可以看做一个进程,进程拥有当前项目里的所有资源。
- 线程:程序中独立运行的代码段。
- 一个进程是由一个或多个线程组成。进程值负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行。
- 线程分为主线程,和子线程,主线程的别名右叫做UI线程。
- 子线程在iOS5之前不具备刷新UI的功能。刷新UI不建议在子线程中(如果多个线程同时操作ui有可能会出现问题,导致程序的崩溃)
- 处理数据时,耗时的处理,在子线程中处理,刷新UI时在主线程中。
- 多线程之间的并发执行其实不是真正意义上的并发执行,而是一中伪并发执行。
- 伪并发执行:CPU快速的在多个线程之间跳跃。
cocoa中与线程相关的类
- NSThread:代表执行的线程,可以使用该类的对象封装线程操作。
- NSOperation:操作对象(Operation Object)的抽象基类,定义了任务的执行环境、状态等基本属性,继承该类来执行具体的操作。
- NSInvocationOperation:NSOperation的子类,可以指定操作方法。
- NSOperationQueue:操作队列(Operation queue)的管理者,配合NSOperation的子类对象和NSInvocationOperation对象使用,通过添加操作对象完成并发操作。
多线程管理
多线程管理也就是主线程和子线程之间的一个通信:所谓的通信就是从子线程回到主线程,从主线程进入子线程。
网友评论