IOS多线程的小总结
ios中多线程的实现方案有4种
1.pthread :一套通用的多线程API/适用于Unix\Linux\Windows等系统 (跨平台可移植/使用难度大) C语言 几乎不用
2.NSThread :使用更加面向对象/简单易用,可直接操作线程对象 程序管理(线程生命周期) OC语言 偶尔使用
3.GCD :旨在替代NSThread等多线程技术/充分利用设备的多核 自动管理 C语言 经常使用
4.NSOperation:基于GCD(底层GCD)/比GCD多一些简单的使用功能/使用更加面向对象 自动管理 OC语言 经常
打印线程标志number ,主线程为1 : [NSThread currentThread]
3种方式创建线程 (新建的都是子线程)
1>NSthread oc 开发人员控制(管理)[线程的创建和销毁] 3中方法创建的线程执行@selelct(方法) 工作中很少用
1>NSThread *thread=[NSThread alloc]initWithTarget:self selector :@selector(add) object:nil];
调用add方法
必须调用 [thread start];
2.[self perFormSelectorInBackGround:@select(add) withObject:nil]
3.[NSThread detachNewThreadSelector:@selelct(add) toTarget:self withObject:nil]
2>gcd 纯c 线程系统自动管理,充分利用多核技术 经常使用
3>操作 基于gcd 的oc的实现方式 经常使用
线程同步,多线调用同一个方法(例add)在方法中加一把锁(锁对象,要求线程使用的都是同一把锁)
加锁之后,就是当一个线程执行完之后再执行另外一个线程
如不加锁,线程会随机(在缓存池中去找线程)调用
@synchronized(self)
{//加锁
for(int i0;i<100;i++){
NSLOg(@“%@”,[NSThread currentThread]);
}
}//解锁
线程之间的通讯(交互,在新创建的子线程中调用方法,在方法中使用主线程去做一些事情,就产生了线程的通信)
1.创建子线程[self performSelectorInBackground:@selector(downLoadImage) withObject:nil];调用downLoadImage方法
2.在downLoadImage方法中使用主线程去下载图片[self performSelectorOnMainThread:@selector(displayPhoto:) withObject:img waitUntilDone:NO];
3.在displayPhoto:方法中显示-(void)displayPhoto:(UIImage *)img {self.photoView.image=img;}
gcd中有操作和队列两种方法,操作分为(同步和异步),队列分为(并发[一次执行多个block]和串行[一次只能一个block执行]).
常见搭配是:1.异步并发
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//获取全局并发队列
异步操作:dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]); });
2.异步+主队列
dispatch_queue_t queue=dispatch_get_main_queue();//获取主队列
异步操作:dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]); });
3.异步+串行
dispatch_queue_t queue=dispatch_queue_create("com", NULL);//创建了一个串行队列
异步操作:dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]); });
4.同步+并发
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//获取全局并发队列
同步操作:dispatch_sync(queue, ^{ NSLog(@"%@",[NSThread currentThread]); });
GCD通信(创建个全局并发/串行队列,在同步/异步队列中,创建主线程来显示)
NSOperation NSOperationQueue *queue=[[NSOperationQueue alloc] init];
添加依赖(就是设置 NSBlockOperation 创建多个b1,b2,b3)
NSBlockOperation *b1=[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1"); }];
[b3 addDependency:b2]; [b2 addDependency:b1]; 只有当b1执行完执行b2 b1->b2->b3
再一次将b1,b2,b3添加到 NSOperation上 queue addOperation:b1/b2/b3
通信和上边一样,在新创建的线程NSOperation中获取主线程操作
IOS多线程的小总结的更多相关文章
- iOS多线程技术方案
iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...
- iOS多线程到底不安全在哪里?
iOS多线程安全的概念在很多地方都会遇到,为什么不安全,不安全又该怎么去定义,其实是个值得深究的话题. 共享状态,多线程共同访问某个对象的property,在iOS编程里是很普遍的使用场景,我们就从P ...
- iOS多线程拾贝------操作巨人编程
iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...
- iOS多线程开发之NSOperation - 快上车,没时间解释了!
一.什么是NSOperation? NSOperation是苹果提供的一套多线程解决方案.实际上NSOperation是基于GCD更高一层的封装,但是比GCD更加的面向对象.代码可读性更高.可控性更强 ...
- iOS 多线程:『GCD』详尽总结
本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法.这大概是史上最详细.清晰的关于 GCD 的详细讲解+总结的文章了.通过本文,您将了解到: 1. GCD 简介 2. GCD 任务和队列 ...
- iOS多线程开发之NSOperation
一.什么是NSOperation? NSOperation是苹果提供的一套多线程解决方案.实际上NSOperation是基于GCD更高一层的封装,但是比GCD更加的面向对象.代码可读性更高.可控性更强 ...
- iOS多线程主题
下面是:2个并发进程.和2个并发线程的示意图: 下面介绍三种多线程技术(Thread.Cocoa Operation.Grand Central Dispatch): 1.最轻量级Thread(需要自 ...
- iOS 多线程GCD的基本使用
<iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 ...
- iOS多线程的详情使用示例--简进祥
大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...
随机推荐
- spring jdbctemplate调用procedure(返回游标)
package cn.com.git.htsc.uac.core.repository.report; import cn.com.git.htsc.uac.core.api.dto.report.R ...
- 【BZOJ1861】【splay】Book 书架
Description 小 T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿 ...
- ios开发相关网站
1.苹果开发者中心(ios Dev Center):最权威的学习ios开发的地方,提供ios开发所能用到的所有内容(包含文档.指南以及实例代码). https://developer.apple.co ...
- jQuery幻灯片skitter-slider插件学习总结
@(关键词)[skitter|jquery|网页幻灯片|slider] Skitter 是一个非常酷炫的jQuery网页幻灯片插件,支持非常多种酷炫幻灯片切换方式,下载前往官网,另有参考文档 下面简单 ...
- 关于本地计算机无法启动Apache2
最近因工作需要,要学习PHP的基础编程,于是学习架设PHP工作环境. 但按照教材上介绍的那样,安装了WMAP后,一直无法运行成功.后发现Apache一直都不在运行状态.到WMAP中的Apache选项中 ...
- jQuery API中文文档
jQuery API中文文档 http://www.css88.com/jqapi-1.9/category/events/event-handler-attachment/ jQuery UI AP ...
- 项目知识点.Part2
1. 取消collectionView头视图重叠情况:以下两种情况效果一样 但是有一点点bug 每次remove之后 需要把视图刷到上面才会显示(后续会改进方法) for (UIView *view ...
- Gunicorn快速入门
Gunicorn (独角兽)是一个高效的Python WSGI Server,通常用它来运行 wsgi application(由我们自己编写遵循WSGI application的编写规范) 或者 w ...
- 如何更好辨认House of hello恶搞包的真假
相信很多朋友都知道houseofhello恶搞包这个品牌,甚至很多朋友都买过,首先呢,她是恶搞包,算自主品牌,它无淘宝店,更没有所谓的香港实体店.因为这品牌受到广大朋友的狂热,导致无数仿品的出现,淘宝 ...
- matlab 全部的随机数函数
matlab 全部的随机数函数 (一)Matlab内部函数 a. 基本随机数 Matlab中有两个最基本生成随机数的函数. 1.rand() 生成(0,1)区间上均匀分布的随机变量.基本语法: ran ...