iOS多线程初步总结
来源:互联网 发布:淘宝客推广论坛 编辑:程序博客网 时间:2024/06/05 21:10
实现多线程的几种方式
一、NSObject方式实现
基于NSOBject方式的多线程是最为简单的多线程,只是需要在后台执行。
例如:
// 参数1:需要在后台(子线程)执行方法// 参数2:给这个方法传参[self performSelectorInBackground:@selector(btnUpClicked:) withObject:nil];
二、NSThread方式实现
NSThread在所有线程中是最为轻量级,可以根据需要,任意操作线程。但是,需要考虑线程安全以及锁问题。
例如:
//NSThread *thread = [NSThread detachNewThreadSelector:<#(SEL)#> toTarget:<#(id)#> withObject:<#(id)#>]NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(btnUpClicked:) object:nil];[thread start];[thread release];
不管怎样,线程的启动还是需要手动控制
内存管理:
需要将对象autorelease,否则对象在其他线程中,无法得到释放。
三、NSOperation方式实现
NSOperation是一个抽象类,使用时需要写基于NSOperation的子类。系统写了两个子类
NSInvocationOperation *invocation = [[NSInvocationOperation alloc] initWithTarget:<#(id)#> selector:<#(SEL)#> object:<#(id)#>]
NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock:^{ // 填写你要执行的任务内容}];
NSOperationOperation是NSOperation的系统定义的子类,省去了继承的代码,使用该类可以方便地制定操作对象、方法。
NSOperationQueue:任务队列,负责将一系列的线程调度管理。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];// 设置最大并发数[queue setMaxConcurrentOperationCount:2];[queue addOperation:op1];[queue addOperation:op2];[queue addOperation:op3];[queue addOperation:op4];
四、GCD
GCD 是基于队列的 多线程实现方式
队列的类型
1.并行: 多个任务同时执行 Concurrent
2.串行: 依次执行任务(同一事件只执行一个任务) Serial
例如:
// 自己创建一个队列// 参数1:给队列起个名字// 参数2:选择队列的类型 DISPATCH_QUEUE_CONCURRENT(串行) dispatch_queue_attr_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);// 使用队列// 参数1: 在哪个队列执行代码// 参数2: 要执行的代码dispatch_async(queue, ^{ [self btnUpClicked:nil];});
1. 一个串行队列 作用:管理主线程的相关事务
// 获得主队列dispatch_queue_t mainQueue = dispatch_get_main_queue();// 在主队列执行任务dispatch_async(mainQueue, ^{ [self btnUpClicked:nil];});2. 4个并行队列
// 参数1: 选择队列的优先级// 参数2: 给未来使用 一般填0dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(globalQueue, ^{ [self btnUpClicked:nil];});
==================
一些关于GCD的使用
==================
==================
// 1.全局队列获取数据 回到主队列将数据加载到视图上dispatch_async(globalQueue, ^{ // 全局队列(子线程)获取数据 NSString *str = @"htt://www.baidu.com"; NSURL *url = [NSURL URLWithString:str]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *image = [UIImage imageWithData:data]; // 返回主线程 加载UI/更新UI dispatch_async(mainQueue, ^{ UIImageView *imageView = [[UIImageView alloc] init]; // 给视图赋值 imageView.image = image; });});
// 2.一段代码只执行依次// 大部分的时候 都在单例方法中使用static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{ NSLog(@"只执行依次");});
// 3.一段代码执行多次 (全局队列有效)// 参数1: 执行多少次// 参数2: 在哪个队列有效// 参数3: 要执行的内容dispatch_apply(4, globalQueue, ^(size_t a) { NSLog(@"%zu", a);});
// 4.定时// 参数1: 间隔几秒// 参数2: 执行的内容dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"=====");});
0 0
- iOS多线程初步总结
- ios多线程初步研究
- Java多线程初步--总结
- iOS 多线程初步研究-NSThread
- iOS 多线程初步研究-锁
- iOS 多线程初步研究-NSRunLoop
- iOS 多线程初步研究-NSTimer
- iOS 多线程初步研究-NSOperation
- iOS 多线程初步研究-NSTimer
- iOS多线程的初步研究
- IOS多线程的初步研究
- 初步学习多线程的总结
- iOS多线程的初步研究(一)
- iOS多线程的初步研究 dispatch队列
- iOS多线程的初步研究(-)-- NSTimer
- iOS多线程的初步研究-- 锁
- iOS多线程的初步研究(一)
- 转转 iOS多线程的初步研究
- Cache-control使用:header('Cache-control:private')学习笔记
- CodeForces 23D Tetragon 给定凸四边形3条同边长的中点求4个顶点 计算几何
- PHP 获取系统时间
- uva 10692 - Huge Mods(数论)
- CSS基础知识
- iOS多线程初步总结
- 一维二位动态数组
- 编译Hadoop 0.22.0 源代码 出错 解决方案
- skyeye1.2.6安装
- static作用
- 并查集
- JS 控制checkbox 获取 全选 全不选 一行不选择全选则不被选择 全部选择全选被选择
- centOS 源码安装apache2遇到的错误
- yum安装nginx-mysql5.1-php5.2-fastcgi构建LNMP服务器