提到线程,就不得不说什么是进程。进程是:一个程序在一个数据集合上的一次运行。这句话也就是说,一个进程,是一个程序在CPU中运行的体现。线程是进程的具体实现,也就是说,一个进程在CPU中进行时间片轮转,真正轮转执行的时一个进程的线程。
进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
线程是处理器调度的基本单位。
开启多线程,在iOS中有三种方法开启多线程
1:NSThread 最接近底层 但是这种线程是不安全的
(因为线程可抢夺,当一个线程先访问了外部变量,在对其进行操作,过了一会,另一个优先级别更高的线程开启了,它也需要使用到同一个外部变量,对它操作完后,这是第一次使用这个外部变量的线程再次使用这个外部变量,就会发生预想不到的错误)。解决办法,就是加锁。线程中还容易发生死锁,这个问题,编者以后补上。
2:NSOperation 更好用,线程安全
3:GCD 和NSOperation一样,更好用,线程安全
第一种 NSThread
开辟线程 有对象方法和类方法
a :对象方法 创建子线程:
NSThread *thread=[[NSThreadalloc]initWithTarget:selfselector:@selector(doThing)object:nil];
//线程名字
thread.name=@"休眠1s";
//线程优先级
thread.threadPriority=0.5;
[threadstart];
b :类方法 创建子线程
[NSThreaddetachNewThreadSelector:@selector(doThing1)toTarget:selfwithObject:nil];
使用NSThread创建的子线程,返回子线程的方法:
//返回主线程中执行执行 --- func
[selfperformSelectorOnMainThread:@selector(func)withObject:nilwaitUntilDone:NO];
来源: http://lib.csdn.net/article/ios/43473