多线程
每个运行的程序都至少包含一个线程, 这个线程可以称为主线程, 在程序运行时创建, 用于执行main函数.
拥有多个线程的程序称作多线程.
当出现以下3种情况时,我们会经常用到多线程管理.
1. 大量运算 (当用到for循环进行大量运算时)
2. 数据读取 (本地,数据库查询时)
3. 网络请求 (同步网络请求时)
注意:在我们手动添加子线程的时候,需要我们自己来添加自动释放池
一,NSThread
1.
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector() object:nil];
[thread start];
2.
[NSThread detachNewThreadSelector:@selector() toTarget:self object:nil]; //方法里写执行的代码,注意自动释放池
二,NSobject
[self performSelectorInBackground:@selector() withObject:nil]; //方法里写执行的代码,注意自动释放池
三,NSOperation 和 NSOperationQueue
NSOperation *operation = [[NSOperation alloc] init];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.naxConcurrentOperationCount = 2; // 线程并发数
[queue addObject:operation];
[operation release];
[queue release];
//注意:线程并发并不能无限制进行, 一般同时运行线程最多10个左右,
当并发数为1的时候, 线程与线程之间是同步的
四,NSBlockOperation
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
@autorelesepool{
// 多线程所要执行的代码
}
}];
五,NSInvocationOperation
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector() object:nil]; //方法里写执行的代码,注意自动释放池
六,GCD
dispatch_queue分为
1.SerialQueue 线程同步, 即一次只执行一个任务,
2. Concurrent 异步执行, 即可以并发的执行多个任务
GCD 功能
dispatch_async() 队列中添加任务,任务会排队执行