NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(longTimeOperation) object:nil];
// 2.启动线程; 调用start方法,告诉CPU线程准备就绪;线程被 CPU 调度之后会自动执行@selector()中的方法;
[thread start];
2. 线程
应用程序中的代码是由线程来执行的!
一个进程至少包含一条线程!
在一个应用程序启动之后,会默认开启一条线程 ----> 主线程!
主线程之外的线程---->子线程
问题:线程是如何执行应用程序中的代码的?
串行执行:
在线程中的代码是按顺序执行的!同一时间内,只能有一个代码块执行!
3. 进程
就是在系统中'正在运行'的应用程序!
进程为应用程序开辟独立的内存空间;
并发执行:
1. 问题又来了! 为什么开启一条新线程之后就能解决卡住主线程这个问题了呢?
答: 因为线程和线程之间是并发执行(同时执行)!
2.多线程
进程是由许多条线程组成的!
一个进程可以包含很多条线程,每条线程都可以执行不同的代码!
并发执行(同时执行):
线程和线程之间是同时执行的! ----> 提高程序的运行效率!
为什么多条线程之间可以并发(同时)执行呢?
线程是由 CPU 来执行的,同一时间只能有一条线程被执行!CPU在多条线程之间快速的切换!
由于 CPU 的执行速度非常快!就给我们造成了多条线程并发执行的'假象' ------- 多线程实现原理!
既然多线程这么爽, 线程是不是越多越好呢?
<1> 开启线程需要消耗一定的内存(默认情况下,线程占用 512KB 的栈区空间);
<2> 会使应用程序增加很多代码!代码变多之后,程序复杂性就会提高!
<3> CPU 在多条线程之间来回切换!线程越多, CPU就越累!
建议: 在移动应用的开发中; 一般只开3~5条线程!
在开发中:用户体验
在 iOS 开发中,多线程开发的知识点:// 只有知道了这些知识点,大家才能进行多线程的开发!
1. 主线程又称为 UI 线程! 主线程的作用: // 有关UI操作,建议都放在主线程中执行!
<1> 更新UI/ 刷新UI界面;
<2> 处理 UI 事件(点击/拖拽/滚动等)
2. 耗时操作会卡住主线程!,影响 UI 操作的流畅度!给用户一种'卡顿'的坏体验!
注意点:别将耗时操作放在主线程中执行!