多线程编程
进程,线程
- 正在活动(运行的)一个应用程序,就是一个进程;
- 每一个进程都至少有一个线程,主线程
- 线程:每一个线程都是独立的,可以执行任务
- 除了主线程,剩下的都是子线程,子线程可以有很多个 ,但是线程是耗费资源的(一般不超过5条,3条为佳)
- 主线程操作的任务:一半时间UI界面的现实,按钮的点击,屏幕滚动,基本一切用户能看见的操作均在主线程中操作
- 比较大的耗时操作都可以在子线程中操作 比如:下载 解压缩,读取大型数据等
- 程序退出后会清空线程的任务
多线程的原理
CPU在工作时,同一时间只能执行一个任务,之所以可以造成多条线程一起执行任务的假象,是因为CPU高速的切换线程(调度),来达到任务一起执行的效果
多线程的优点:
1. 可以大大提高执行任务的效率
2. 可以让用户 有更好的用户体验
缺点:如果大量的开辟线程 会造成程序的卡顿 耗费过量的资源
NSThread
查看当前线程的方法
[NSThread currentThread];
开启子线程1
// 触摸view触发方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
// 该方法在哪个线程调用 该方法的线程就是那个线程
// [self performSelector:@selector(download:) withObject:@"qewe"];
// 开启子线程
// 该方法是基类提供 只要是对象都能调用
[self performSelectorInBackground:@selector(download:) withObject:@"123"];
}
开启子线程2
// 初始化 开辟一个子线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:@"123"];
[thread start];
开启线程3
// 2.开辟一个子线程 不用开始自动执行
[NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:@"123"];