#线程和进程
进程就是一个独立的应用程序,是cpu调度的独立单元,享有独立的系统资源(内存)
线程是进程中的执行单元,是cpu调用的最小单位,一个进程可以有多个线程但至少有一个,它们中有一个为主线程,其他为分线程
#多线程编程
在我们编写程序时,有的任务会花取大量时间进行处理,所以我们为了防止这些任务阻塞到我们的主线程,照成UI卡顿,会用到多线程编程。
#iOS中多线程编程主要有三种方式
- NSThread:
- NSOperation && NSOperationQueue
- **GCD **
##1.NSThread
NSThread多任务处理时,程序员需要手动对线程的生周期进行管理,线程数量完全自己决定
###开辟分线程的三个方法 - 静态方法创建:
//参数:1.分线程执行的函数 2.分线程方法的执行者 3.参数
[NSThread detachNewThreadSelector:@selector(threadMethod1) toTarget:self withObject:nil];
- 使用alloc init方式创建线程 需要启动线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadMethod2) object:nil];
thread.name = @"bibi";
// 启动线程
[thread start];
- 隐性开辟分线程
// 在performSelector系列方法中 只有此方法可以开辟分线程
[self performSelectorInBackground:@selector(threadMethod3) withObject:nil];
###其他方法
// 此方法指定的testMehtod是在主线程中执行的
[self performSelector:@selector(testMehtod)];
// 退出线程 肾用
[NSThread exit];
//获取当前线程
[NSThread currentThread]
//判断是否是主线程
[NSThread isMainThread]
//获取主线程
[NSThread mainThread]
// 让当前线程休眠
[NSThread sleepForTimeInterval:10];
***注意:***在分线程中不能操作UI,需要回到主线程中操作UI
// 参数:1.回到主线程执行的方法 2.参数 3.是否要锁住当前线程等待主线程方法执行完毕
[self performSelectorOnMainThread:@selector(mainThreadMethod) withObject:nil waitUntilDone:NO];