多线程 ,NSTread、NSOpetation、GCD

多线程 ,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, ^{});

 

posted @ 2015-08-04 21:37  heyuan123  阅读(343)  评论(0编辑  收藏  举报