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

时间: 2024-08-06 07:29:29

多线程 ,NSTread、NSOpetation、GCD的相关文章

多线程——NSThread、GCD、NSOperation

1.前言: 一个应用程序就是一个进程,一个进程至少包含一个线程,程序启动会自动创建一个主线程,负责UI界面的现实和控件事件的监控.多线程可以更充分的利用系统CPU资源,一定程度上提升程序的性能.1个进程可以开启多条线程,每条线程可以并行(同时)执行不同的任务.在一个线程内可以包含多个事物(要干的活),在线程内依据先进先出的特性串行执行…… 2.NSThread - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"main thread is %@

多线程编程4 - GCD

一.简介 在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器.GCD是Grand Central Dispatch的简称,它是基于C语言的.如果使用GCD,完全由系统管理线程,我们不需要编写线程代码.只需定义想要执行的任务,然后添加到适当的调度队列(dispatch queue).GCD会负责创建线程和调度你的任务,系统直接提供线程管理 二.调度队列(dispath qu

iOS多线程开发之GCD(下篇)

上篇和中篇讲解了什么是GCD,如何使用GCD,这篇文章将讲解使用GCD中将遇到的死锁问题.有兴趣的朋友可以回顾<iOS多线程开发之GCD(上篇)>和<iOS多线程开发之GCD(中篇)>. 言归正传,我们首先来回顾下死锁,所谓死锁: 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源(如数据源,内存等,变量不是资源)而造成的一种互相等待的现象,若无外部处理作用,它们都将无限等待下去. 死锁形成的原因: 系统资源不足 进程(线程)推进的顺序不恰当: 资源分配不当 死锁形成的条件:

iOS开发多线程网络———多线程概念及GCD

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(htt

多线程开发之三 GCD

NSThread.NSOperation.GCD 总结: 无论使用哪种方法进行多线程开发,每个线程启动后并不一定立即执行相应的操作,具体什么时候由系统调度(CPU 空闲时就会执行) 更新 UI 应该在主线程(UI 线程)中进行,并且推荐使用同步调用,常用的方法如下: - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelec

学习IOS开发网络多线程篇--NSThread/GCD/

NSThread:利用NSThread创建和启用一个线程 1. NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];,调用后调用[thread start]; 2. 创建线程后自动启动线程 ,[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; 3. 隐式创建

iOS多线程开发之GCD 用法入门

我们知道,在iOS中进行多线程编程,主要有三种方式:[NSThread].[NSOperation]和[GCD].其中又以[GCD]为苹果官方最为推荐.本文将利用一个简单的demo,简述GCD的用法入门,以及本人对GCD的一点肤浅理解和学习心得. 先把参考文章列出: http://www.cnblogs.com/kenshincui/p/3983982.html http://www.cnblogs.com/sunfrog/p/3305614.html http://mobile.51cto.c

iOS开发多线程篇 05 —GCD介绍

iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中

多线程简介及GCD的使用

多线程简介: 对于任意一个iOS应用,程序运行起来后,默认会产生一个主线程(MainThread),主线程专门用来处理UIKit对象的操作,如界面的显示与更新.处理用户事件触发的操作等等.(记忆这点,所有与UI相关的操作都要在主线程中进行) 对于一个App应用来说,之所以需要引入多个线程,很大程度上是由于有一些操作是非常耗时的,例如:发送网络请求并等待服务器的响应,这种耗时操作是不能 够放在主线程中进行操作的,因为在等待的时间内,主线程被使用,用户是不能做任何交互动作的,因而会极大影响用户体验.

iOS 多线程知识总结 GCD基础知识

进程的基本概念: 1.每一个进程都是一个一个应用程序,都有独立的内存空间,一般来说一个应用程序存在一个进程存在一个进程,但也有多个进程的情况. 2.同一个进程中的线程共享内存中内存中资源. 多线程的基本概念: 1.每一个程序都有一个主线程,程序启动时创建(调用main函数来启动) 2.主线程的生命周期是和其他应用程序绑定的,程序退出时,主线程也就停止了. 3.多线程技术表示,一个应用程序有多个线程,使用多线程能提高CPU的使用效率,防止线程阻塞 4.任何有可能阻塞主线程的任务不要在主线程中执行(