IOS 并发处理
2014-02-19 17:17
176 查看
1.并发指的是在同一时间两个或两个以上的任务同时执行并且抢占统一资源的过程
如果只有一个cpu或许并发就不存在了,但是科技的进步带了并发处理这个问题,因为现在手机双核、四核乃至八核(三星、魅族)
首先介绍个概念:GCD(Grand Central Dispatch)我的理解就是在同一时间重要资源的派遣处理,是底层的C的用于处理块儿的接口,主要用预处理多任务其中的一条任务是有那个处理器处理。GCD的核心就是一个处理队列,也可以说是一个线程池
1)主线程队列:所有的任务都都是在主队列完成的,大部分是处理UI的东西,可以用dispatch_get_main_queue方法返回到主队列里面,一个application只有一个主线程队列
2)并发队列:dispatch_get_global_queue获得处理并发队列的handle
3) 串性队列:一FIFO模式进行处理,dispatch_queue_create创建该队列,dispatch_release释放该队列
任务分配给不同的队列有两种方法,第一:通过块,第二:通过C方法
2.处理和UI相关的任务:用dispatch_get_main_queue得到主线程
dispatch_async:执行块儿
dispatch_async_f :处理C程序
3.同步任务下载一个图片,因为每个线程可能在抢占资源,所以有时图片不能显示,代码如下
(明天再写~~ 今天就学到这里!!!学习真的是件愉快的实情~~~~~)
如果只有一个cpu或许并发就不存在了,但是科技的进步带了并发处理这个问题,因为现在手机双核、四核乃至八核(三星、魅族)
首先介绍个概念:GCD(Grand Central Dispatch)我的理解就是在同一时间重要资源的派遣处理,是底层的C的用于处理块儿的接口,主要用预处理多任务其中的一条任务是有那个处理器处理。GCD的核心就是一个处理队列,也可以说是一个线程池
1)主线程队列:所有的任务都都是在主队列完成的,大部分是处理UI的东西,可以用dispatch_get_main_queue方法返回到主队列里面,一个application只有一个主线程队列
2)并发队列:dispatch_get_global_queue获得处理并发队列的handle
3) 串性队列:一FIFO模式进行处理,dispatch_queue_create创建该队列,dispatch_release释放该队列
任务分配给不同的队列有两种方法,第一:通过块,第二:通过C方法
2.处理和UI相关的任务:用dispatch_get_main_queue得到主线程
dispatch_async:执行块儿
dispatch_async_f :处理C程序
dispatch_queue_t mainQueue = dispatch_get_main_queue(); dispatch_async(mainQueue, ^{ [[[UIAlertView alloc]initWithTitle:@"GCD" message:@"Amazing" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil] show]; });
3.同步任务下载一个图片,因为每个线程可能在抢占资源,所以有时图片不能显示,代码如下
-(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(concurrentQueue, ^{ __block UIImage *img = nil; dispatch_async(concurrentQueue, ^{ NSString *urlAsString = @"http://f.hiphotos.baidu.com/image/w%3D2048/sign=f57cca190bf79052ef1f403e38cbd6ca/c75c10385343fbf267c91f29b27eca8064388fd7.jpg"; NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; NSError *downloadError = nil; NSData *imgData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:&downloadError]; if(downloadError==nil&&imgData!=nil) { img = [UIImage imageWithData:imgData]; NSLog(@"data is loading..."); } else if(downloadError!=nil) { NSLog(@"%@",downloadError); }else { NSLog(@"No data could get downloaded form the url"); } }); dispatch_async(dispatch_get_main_queue() , ^{ if(img!=nil) { UIImageView *imgView = [[UIImageView alloc]initWithFrame:self.view.bounds]; [imgView setImage:img]; [imgView setContentMode:UIViewContentModeScaleAspectFill]; [self.view addSubview:imgView]; } else { NSLog(@"Image is not download.Nothing to dispaly"); } }); });
(明天再写~~ 今天就学到这里!!!学习真的是件愉快的实情~~~~~)
相关文章推荐
- iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等
- iOS开发系列--并行开发(处理多个网络请求并发的情况)
- IOS线程的并发与处理(翻译自:http://www.objc.io/issue-2/concurrency-apis-and-pitfalls.html)
- MongoDB、iOS版新浪微博、高性能并发处理课程全新上线
- iOS并发处理的那些事(译自外文)
- IOS-如何处理多个网络请求的并发的情况
- iOS面试题--网络--如何处理多个网络请求的并发的情况
- (转)iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等
- iOS线程处理 学习笔记(一)并发
- iOS -NSOperation——高级的并发处理方法
- IOS并发处理的同步和通信
- iOS 处理多个网络请求的并发的情况
- iOS开发—处理多个网络请求并发的情况
- [转载]iOS并发编程指南
- epoll + 多线程实现并发网络连接处理
- iOS 和Android中的基本日期处理
- iOS开发学习笔记 -- (二)动态添加控件和事件处理
- 应用和系统开发过程中,高并发的访问对同一数据的不一致,读脏数据的处理办法
- IOS学习——自定义View与使用block实现事件处理入门
- 并发问题,锁,怎么处理死锁,脏数据处理