标签:
多线程 ,NSTread、NSOpetation、GCD
eg :
多线程 在iOS 中用的很多 ,比如 网络下载的请求 和 sdwebimage 请求等耗时较多的数据处理,多线程就会派上用场,可以防止界面假死,增强用户体验
是一个简单的以任务为导向的多线程模型。目的是 为了不懂操作系统,不懂线程的人使用的
第一种:NSBlockOperation *blockOp1 = [NSBlockOperation blockOperationWithBlock:^{}
第二种: NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operation1:) object:@"任务1"];
前两种都要 放入线程池中[_queue addOperation:blockOp1];
第三种:直接向线程池 添加 block 任务 [_queue addOperationWithBlock:^{}
)
二、 NSTread 是创建线程的一个通用的类。比如线程创建 ,取消,开始。
(有三种 创建 方式 :
//1.创建一个后台线程
[self performSelectorInBackground:@selector(threadClick1:) withObject:@"线程1"];
//2.创建线程
NSThread *thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(threadClick2:) object:@"线程2"];
thread2.name = @"thread2";
//这种创建方式需要手动启动线程
[thread2 start];
//3/创建子线程 这种方式一旦创建 立即启动
[NSThread detachNewThreadSelector:@selector(threadClick3:) toTarget:self withObject:@"线程3"];
)
[thread cancel]; cancel 给 thread表示的线程发送一个取消信号,thread线程 就会接收到,接收到之后 需要thread表示的线程 自己结束(自己判断是否需要结束)
三、GCD
是一个带block 的线程模块
GCD 有三种 队列类型 :
The main queue :与主线程功能相同 。可以调用 dispatch_get_main_queue( )获得 。是串行队列
dispatch_async(dispatch_get_main_queue(), ^{})
Global queues :全局队列 是并发队列。进程中有三种全局队列 高,中(默认),低 三个优先级队列 。可以调用 dispatch_get_global_queue( )传入优先级 访问队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});
用户队列:dispatch_queue_create 创建的队列 这些队列是串行 队列
dispatch_queue_t queue = dispatch_queue_create("com.1505", NULL);
dispatch_async(queue, ^{});
标签:
原文地址:http://www.cnblogs.com/PengFei-N/p/4703202.html