多线程 NSThread GCD
ios多线程实现种类
NSThread
NSOperationQueue
NSObject
GCD
***************
1.NSThread
//线程
第一种
NSThread *thread1=[[NSThread alloc] initWithTarget:self selector:@selector(sum) object:nil];
//
// //给线程起名字
thread1.name=@"thread1";
// //启动线程
[thread1 start];
//结束线程
[thread1 cancel];
第二种(不需要手动开启的)
[NSThread detachNewThreadSelector:@selector(sum) toTarget:self withObject:nil];
2. NSOperation的两个子类
//一.
NSInvocationOperation *inop=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(invocation) object:nil];
// [inop start];
//二.
NSBlockOperation *blop=[NSBlockOperation blockOperationWithBlock:^{
NSLog(@"我是block");
}];
//创建队列
NSOperationQueue *queue=[[NSOperationQueue alloc] init];
//设置最大并行数量
queue.maxConcurrentOperationCount=2;
//添加事件
[queue addOperation:inop];
[queue addOperation:blop];
3.NSObject
[self performSelectorInBackground:@selector(sum) withObject:nil];
4.GCD
//GCD (先进先出 FIFO)
//串行:前一个任务完成,后一个任务才能执行
//并行:任务在派发时有序的,但是不应等第一个任务执行完成才开始.
//GCD队列分3中:主队列,全局队列,自定义队列
//1.使用主队列实现任务派发(串行),在主线程中
dispatch_queue_t mainQueue=dispatch_get_main_queue();
//1.1添加任务
dispatch_async(mainQueue, ^{
NSLog(@"第一个任务:当前线程是%@",[NSThread currentThread]);
});
//串行
//2.自定义队列
/*
dispatch_queue_t myQueue=dispatch_queue_create("com.lanlan.myqueue", DISPATCH_QUEUE_SERIAL);
//2.1添加任务
dispatch_async(myQueue, ^{
NSLog(@"第一个任务:当前线程:%@",[NSThread currentThread]);
});
//并行
//3.自定义队列
/*
dispatch_queue_t myQueue2=dispatch_queue_create("com.lanlan.myqueue", DISPATCH_QUEUE_CONCURRENT);
//3.1添加任务
dispatch_async(myQueue2, ^{
NSLog(@"第一个任务:当前线程:%@",[NSThread currentThread]);
});
//4.全局队列
/*
dispatch_queue_t globelQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//4.1添加任务
dispatch_async(globelQueue, ^{
NSLog(@"第一个任务:当前线程:%@",[NSThread currentThread]);
});
5.只保证执行一次
//保证只执行一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"这里的代码只执行一次");
});
6.延迟5秒后执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"等我5秒...");
});
7.//重复执行
dispatch_apply(5, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t t) {
NSLog(@"今天天气不错");
});
//子线程
[NSThread detachNewThreadSelector:@selector(newThead) toTarget:self withObject:nil];
//回到主线程
[self performSelectorOnMainThread:@selector(mymainTherad) withObject:self waitUntilDone:NO];
-(void)mymainTherad
{
//打印线程
NSLog(@"我在主线程里%@",[NSThread currentThread]);
}
多线程 NSThread GCD的更多相关文章
- iOS多线程 NSThread/GCD/NSOperationQueue
无论是GCD,NSOperationQueue或是NSThread, 都没有线程安全 在需要同步的时候需要使用NSLock或者它的子类进行加锁同步 "] UTF8String], DISPA ...
- iOS中的多线程NSThread/GCD/NSOperation & NSOperationQueue
iOS多线程有四套多线程方案: Pthreads NSThread GCD NSOperation & NSOperationQueue 接下来我来一个一个介绍他们 Pthreads 在类Un ...
- iOS 开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- iOS开发多线程篇—GCD介绍
iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...
- iOS开发多线程篇—GCD的基本使用
iOS开发多线程篇—GCD的基本使用 一.主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行. 提示:如果把任务放到主队列中进 ...
- iOS开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- [iOS]多线程和GCD
新博客wossoneri.com 进程和线程 进程 是指在系统中正在运行的一个应用程序. 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 比如同时打开QQ.Xcode,系统就会分别 ...
- iOS开发多线程篇—GCD简介
iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...
- 多线程:GCD
多线程是程序开发中非常基础的一个概念,大家在开发过程中应该或多或少用过相关的东西.同时这恰恰又是一个比较棘手的概念,一切跟多线程挂钩的东西都会变得复杂.如果使用过程中对多线程不够熟悉,很可能会埋下一些 ...
随机推荐
- php 写队列
这里不得不提到php的数组函数真的是太强大了 队列是先进先出 那么对于数组来说就尾部插入,头部拿出 这里提供方法 尾部插入 我们知道有一个函数array_push 头部拿出 array_shift($ ...
- 浅谈window.attachEvent
以前写 JavaScript 脚本时,事件都是采用object.event = handler;的方式初始化.这种方式对于 Internet Explorer.Mozilla/Firefox 和 Op ...
- JS设置获取cookies
结合JavaScript权威指南,加上项目开发时在网上搜集的资料,整理了两种设置和获取cookie的方法. <script> //设置cookie 方法一function setCook ...
- WPF笔记(2.7 文字布局)——Layout
原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock 最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...
- C语言的本质(34)——静态库
库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linux通常把库文件存放在/usr/lib ...
- easyui 表单验证validatetype——支持自定义验证
easyui 的validatebox()提供了自定义验证的方法,为此我把一些常用的数据验证汇总了一下,代码如下: 代码 Code highlighting produced by Actipro C ...
- poj 1020 Anniversary Cake(切正方形蛋糕+搜索)
...
- ObjectOutputStream 追加写入读取错误
摘自http://blog.csdn.net/mitkey/article/details/50274543 问题描述: 用类ObjectOutputStream向文件写读对象时,碰到一个问题:新建一 ...
- Python 列表生成式、生成器、迭代器
列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么 ...
- JAXB
注解
JAXB(Java API for XML Binding),它提供了一个便捷的方式高速Java对象XML转变.于JAX-WS(Java的WebService规范之中的一个)中,JDK1.6 自带的版 ...