GCD常用方法
//使用GCD创建多线程
-(void)initWithGCD
{
//使用GCD创建多线程
dispatch_queue_t groupBack=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(groupBack, ^{
[self initWithSameRequest];
});
/*1 2 3 线程执行完 才开始执行4 5 6. 也就是说1 2 3 开始执行 4 5 6处于等待状态,1 2 3 执行完4 5 6马上进去执行*/
/* dispatch_queue_t aDQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 1 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 2 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 3 \n");
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);//其他同类等待
dispatch_release(group);
NSLog(@"1 23 完成 4 5 6开始了");
group = dispatch_group_create();
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 4 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 5 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 6 \n");
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_release(group);*/
}
2.//使用GCD通知主线程执行
-(void)initWithGradeCenterDispatch
{
dispatch_queue_t Queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(Queue, ^{
NSURL * URL=[NSURL URLWithString:@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"];
NSData * DATA=[[NSData alloc]initWithContentsOfURL:URL];
UIImage * image=[[UIImage alloc]initWithData:DATA];
if (DATA!=nil)
{
//通知主线程更新界面
dispatch_async(dispatch_get_main_queue(),
^{
self.imageView.image=image;
});
}
});
}
3. //顺序执行
-(void)initDownLocation
{
dispatch_queue_t main=dispatch_queue_create("gcdtest.rongfzh.yc",DISPATCH_QUEUE_CONCURRENT);
dispatch_async(main, ^{
NSLog(@"任务1\n%@",[NSDate date]);
});
dispatch_async(main, ^{
NSLog(@"任务2\n%@",[NSDate date]);
});
dispatch_barrier_async(main, ^{
NSLog(@"任务3\n%@",[NSDate date]);
});
dispatch_async(main, ^{
NSLog(@"任务4\n%@",[NSDate date]);
});
}
//代码执行N次
-(void)Ntimes
{
dispatch_queue_t groupBack=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_apply(5,groupBack, ^(size_t index)
{
// 执行5次
NSLog(@"执行5次了吗");
});
}
//创建一个同步请求
-(void)initWithSameRequest
{
NSURL * url=[NSURL URLWithString:@"http://api.douban.com/book/subjects?q=%E4%B8%89&start-index=1&max-results=10&apikey=04f1ae6738f2fc450ed50b35aad8f4cf&alt=json"];
ASIHTTPRequest * request=[[ASIHTTPRequest alloc]initWithURL:url];
//设置是否按服务器在Header里指定的是否可被缓存或过期策略进行缓存:
//[[ASIDownloadCache sharedCache]setShouldRespectCacheControlHeaders:NO];
//设置缓存的有效时间 30天
//[request setSecondsToCache:60*60*24*30];
//判断能不能重缓存种读取
//[request didUseCachedResponse];
//设置缓存的路径
// NSArray * path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString * docpath=[path objectAtIndex:0];
// [request setDownloadDestinationPath:docpath];
//设置缓存 把缓存数据永久保存在本 地,
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
// [request setDownloadDestinationPath:[[ ASIDownloadCache sharedCache ] pathToStoreCachedResponseDataForRequest:request ]];
[request startSynchronous];//同步下载
NSError * error=[request error];
if (!error)
{
//NSString *
NSDictionary * json=[request.responseData objectFromJSONData];
NSArray * allBooks = [json objectForKey:@"entry"];
for (NSDictionary * book in allBooks)
{
// model=[[BookModel alloc]init];
//评论
NSString * avger=[[book objectForKey:@"gd:rating"]objectForKey:@"@average"];
// model.rating=[avger floatValue];
NSLog(@"%f",[avger floatValue]);
NSString * number=[[book objectForKey:@"gd:rating"]objectForKey:@"@numRaters"];
// model.numRatings=[number intValue];
NSLog(@"%d",[number intValue]);
//书的名字
NSString * titleName=[[book objectForKey:@"title"] objectForKey:@"$t"];
NSLog(@"书的名字: %@",titleName);
//model.bookName=titleName;
// NSArray * authotArray=[book objectForKey:@"author"];
// for (NSDictionary *author in authotArray)
// {
// NSString * authorName=[[book objectForKey:@"name"] objectForKey:@"$t"];
// NSLog(@"作者的名字 :%@",authorName);
// }
// NSString * categotyName=[[book objectForKey:@"category"]objectForKey:@"@scheme"];
// NSLog(@"categoty %@",categotyName);
NSArray * attribute=[book objectForKey:@"db:attribute"];
for (NSDictionary * attributess in attribute)
{
NSString * attraName=[attributess objectForKey:@"@name"];
if ([attraName isEqualToString:@"pubdate"])
{
NSString * pubdate=[attributess objectForKey:@"$t"];
NSLog(@"pubdate %@",pubdate);
}
else if ([attraName isEqualToString:@"publisher"])
{
NSString * publisher=[attributess objectForKey:@"$t"];
// model.publisher=publisher;
NSLog(@"publisher %@",publisher);
}
else if ([attraName isEqualToString:@"price"])
{
NSString * price=[attributess objectForKey:@"$t"];
NSLog(@"price %@",price);
//价格
// model.price=price;
}
else if ([attraName isEqualToString:@"author"])
{
NSString * author=[attributess objectForKey:@"$t"];
NSLog(@"author %@",author);
//作者的名字
// model.autherName=author;
}
else if ([attraName isEqualToString:@"translator"])
{
NSString * translator=[attributess objectForKey:@"$t"];
NSLog(@"translator %@",translator);
//出版社
//model.translator=translator;
}
}
NSArray * link=[book objectForKey:@"link"];
for (NSDictionary * image in link)
{
NSString * str=[image objectForKey:@"@rel"];
if ([str isEqualToString:@"image"])
{
//图片
NSString * pubdate=[image objectForKey:@"@href"];
NSLog(@"pubdate %@",pubdate);
//model.iconUrl=pubdate;
}
else if([str isEqualToString:@"mobile"])
{
NSString * mobile=[image objectForKey:@"@href"];
// model.introUrl=mobile;
NSLog(@"mobile %@",mobile);
}
}
}
}
[self performSelectorOnMainThread:@selector(hello) withObject:nil waitUntilDone:YES];
[request release];
}
-(void)hello
{
NSLog(@"下载完成,请主线程注意更新");
}
//创建一个异步请求
-(void)initWithDifferent
{
NSURL * url1=[NSURL URLWithString:@"http://api.douban.com/book/subjects?q=%E4%B8%89&start-index=1&max-results=10&apikey=04f1ae6738f2fc450ed50b35aad8f4cf&alt=json"];
ASIHTTPRequest * request=[[ASIHTTPRequest alloc]initWithURL:url1];
// [request cancel];//取消异步请求 这个是取消所有的异步请求
// [request clearDelegatesAndCancel];//如果不想调用delegate方法
request.delegate=self;
[request startAsynchronous];//异步下载
}
//使用GCD创建多线程
-(void)initWithGCD
{
//使用GCD创建多线程
dispatch_queue_t groupBack=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(groupBack, ^{
[self initWithSameRequest];
});
/*1 2 3 线程执行完 才开始执行4 5 6. 也就是说1 2 3 开始执行 4 5 6处于等待状态,1 2 3 执行完4 5 6马上进去执行*/
/* dispatch_queue_t aDQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 1 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 2 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 3 \n");
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);//其他同类等待
dispatch_release(group);
NSLog(@"1 23 完成 4 5 6开始了");
group = dispatch_group_create();
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 4 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 5 \n");
});
dispatch_group_async(group, aDQueue, ^{
NSLog(@"task 6 \n");
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_release(group);*/
}
2.//使用GCD通知主线程执行
-(void)initWithGradeCenterDispatch
{
dispatch_queue_t Queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(Queue, ^{
NSURL * URL=[NSURL URLWithString:@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"];
NSData * DATA=[[NSData alloc]initWithContentsOfURL:URL];
UIImage * image=[[UIImage alloc]initWithData:DATA];
if (DATA!=nil)
{
//通知主线程更新界面
dispatch_async(dispatch_get_main_queue(),
^{
self.imageView.image=image;
});
}
});
}
3. //顺序执行
-(void)initDownLocation
{
dispatch_queue_t main=dispatch_queue_create("gcdtest.rongfzh.yc",DISPATCH_QUEUE_CONCURRENT);
dispatch_async(main, ^{
NSLog(@"任务1\n%@",[NSDate date]);
});
dispatch_async(main, ^{
NSLog(@"任务2\n%@",[NSDate date]);
});
dispatch_barrier_async(main, ^{
NSLog(@"任务3\n%@",[NSDate date]);
});
dispatch_async(main, ^{
NSLog(@"任务4\n%@",[NSDate date]);
});
}
//代码执行N次
-(void)Ntimes
{
dispatch_queue_t groupBack=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_apply(5,groupBack, ^(size_t index)
{
// 执行5次
NSLog(@"执行5次了吗");
});
}
//创建一个同步请求
-(void)initWithSameRequest
{
NSURL * url=[NSURL URLWithString:@"http://api.douban.com/book/subjects?q=%E4%B8%89&start-index=1&max-results=10&apikey=04f1ae6738f2fc450ed50b35aad8f4cf&alt=json"];
ASIHTTPRequest * request=[[ASIHTTPRequest alloc]initWithURL:url];
//设置是否按服务器在Header里指定的是否可被缓存或过期策略进行缓存:
//[[ASIDownloadCache sharedCache]setShouldRespectCacheControlHeaders:NO];
//设置缓存的有效时间 30天
//[request setSecondsToCache:60*60*24*30];
//判断能不能重缓存种读取
//[request didUseCachedResponse];
//设置缓存的路径
// NSArray * path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString * docpath=[path objectAtIndex:0];
// [request setDownloadDestinationPath:docpath];
//设置缓存 把缓存数据永久保存在本 地,
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
// [request setDownloadDestinationPath:[[ ASIDownloadCache sharedCache ] pathToStoreCachedResponseDataForRequest:request ]];
[request startSynchronous];//同步下载
NSError * error=[request error];
if (!error)
{
//NSString *
NSDictionary * json=[request.responseData objectFromJSONData];
NSArray * allBooks = [json objectForKey:@"entry"];
for (NSDictionary * book in allBooks)
{
// model=[[BookModel alloc]init];
//评论
NSString * avger=[[book objectForKey:@"gd:rating"]objectForKey:@"@average"];
// model.rating=[avger floatValue];
NSLog(@"%f",[avger floatValue]);
NSString * number=[[book objectForKey:@"gd:rating"]objectForKey:@"@numRaters"];
// model.numRatings=[number intValue];
NSLog(@"%d",[number intValue]);
//书的名字
NSString * titleName=[[book objectForKey:@"title"] objectForKey:@"$t"];
NSLog(@"书的名字: %@",titleName);
//model.bookName=titleName;
// NSArray * authotArray=[book objectForKey:@"author"];
// for (NSDictionary *author in authotArray)
// {
// NSString * authorName=[[book objectForKey:@"name"] objectForKey:@"$t"];
// NSLog(@"作者的名字 :%@",authorName);
// }
// NSString * categotyName=[[book objectForKey:@"category"]objectForKey:@"@scheme"];
// NSLog(@"categoty %@",categotyName);
NSArray * attribute=[book objectForKey:@"db:attribute"];
for (NSDictionary * attributess in attribute)
{
NSString * attraName=[attributess objectForKey:@"@name"];
if ([attraName isEqualToString:@"pubdate"])
{
NSString * pubdate=[attributess objectForKey:@"$t"];
NSLog(@"pubdate %@",pubdate);
}
else if ([attraName isEqualToString:@"publisher"])
{
NSString * publisher=[attributess objectForKey:@"$t"];
// model.publisher=publisher;
NSLog(@"publisher %@",publisher);
}
else if ([attraName isEqualToString:@"price"])
{
NSString * price=[attributess objectForKey:@"$t"];
NSLog(@"price %@",price);
//价格
// model.price=price;
}
else if ([attraName isEqualToString:@"author"])
{
NSString * author=[attributess objectForKey:@"$t"];
NSLog(@"author %@",author);
//作者的名字
// model.autherName=author;
}
else if ([attraName isEqualToString:@"translator"])
{
NSString * translator=[attributess objectForKey:@"$t"];
NSLog(@"translator %@",translator);
//出版社
//model.translator=translator;
}
}
NSArray * link=[book objectForKey:@"link"];
for (NSDictionary * image in link)
{
NSString * str=[image objectForKey:@"@rel"];
if ([str isEqualToString:@"image"])
{
//图片
NSString * pubdate=[image objectForKey:@"@href"];
NSLog(@"pubdate %@",pubdate);
//model.iconUrl=pubdate;
}
else if([str isEqualToString:@"mobile"])
{
NSString * mobile=[image objectForKey:@"@href"];
// model.introUrl=mobile;
NSLog(@"mobile %@",mobile);
}
}
}
}
[self performSelectorOnMainThread:@selector(hello) withObject:nil waitUntilDone:YES];
[request release];
}
-(void)hello
{
NSLog(@"下载完成,请主线程注意更新");
}
//创建一个异步请求
-(void)initWithDifferent
{
NSURL * url1=[NSURL URLWithString:@"http://api.douban.com/book/subjects?q=%E4%B8%89&start-index=1&max-results=10&apikey=04f1ae6738f2fc450ed50b35aad8f4cf&alt=json"];
ASIHTTPRequest * request=[[ASIHTTPRequest alloc]initWithURL:url1];
// [request cancel];//取消异步请求 这个是取消所有的异步请求
// [request clearDelegatesAndCancel];//如果不想调用delegate方法
request.delegate=self;
[request startAsynchronous];//异步下载
}
相关推荐
GCD常用和不常用API说明GCD_Demo-master.zip
葵花宝典之GCD常用和不常用API说明和Demo演示,让你轻松不费脑力的理解GCD的应用场景和操作姿势
创建最常用的除数计算器;。。。GCD计算器允许您快速查找一组数字的最大公约数;。。。当两个数的最大公约数为1时,这两个数称为互质或相对素数。
//1、进某页面要发四个请求,四个请求之间无影响 //2、进某页面要发四个请求,四个请求之间无影响,等所有请求回来刷新界面 //3、进某页面要发四个请求,其中某个请求的请求参数是另一个请求结果的返回字段(请求2...
计算GCD的简单java程序创建最常用的除数计算器;
iOS多线程编程之Grand Central Dispatch(GCD)使用,具有1、常用的方法dispatch_async 2、dispatch_group_async 3、dispatch_barrier_async 4、dispatch_apply的用法
iOS开发中,有两种常用的方法可以实现延迟执行,一种是使用GCD,另外一种是使用NSRunLoop类中提供的方法。 前言 对初学者来说,GCD似乎是一道迈不过去的坎,很多人在同步、异步、串行、并行和死锁这几个名词的漩涡中...
常用算法模板_C++.zip AC自动机,Dijkstra,Floyd,GCD,KMP,KMP扩展,Kruskal,LCM,LCS,LIS,Prim,SPFA,埃氏筛,背包,并查集,多边形面积,二分搜索,高精度加法,高精度阶乘,级角排序,进制转换,快速幂,...
整理的若干java常用工具类,整理的若干java常用工具类,整理的若干java常用工具类
ios多线程开发的常用四种方式和基本使用,pthread、NSThread、NSOperation\NSOperationQueue、GCD
3.GCD方法 4.sleep(NSThread)方法 延迟执行代码: - (void)delayDo : (id)sender { NSLog(@do:%@,sender); } 1.performSelector(NSObject)方法 这是iOS中常用的一种延迟执行方法. 特点:这个方法必须要在主线程中...
含常见的c++的模版,如滑动窗口模版,dp,字符串常用函数等。利用leetcode上的题目为依托,依照每种类型的题目模版,进行力扣答案的整理。如能改变K个字母,找连续字母的最大长度K=0时就是连续的字母的最大长度,...
Python蓝桥杯易错点整理和心得...gcd板子(太常用了): e2f67980fab44a379142cf4f0da0b9be.png def gcd(a,b): while b: a,b=b,a%b return a 那么lcm的板子可以由gcd推得 55b8dd00f085486e818d31f02b00f3e7.p
要求两个数的最小公倍数,最常用的方法是先找到这两个数的最大公约数(GCD),然后用两数的乘积除以它们的最大公约数。这种方法基于一个简单的数学原理:两个数的乘积等于它们的最大公约数和最小公倍数的乘积。即,...
多线程开发,GCD的常用函数,实现线程同步:调度组、栅栏函数、信号量、NSOpertion添加线程依赖
| 约瑟夫环问题(数学方法) 27 | 约瑟夫环问题(数组模拟) 27 | 取石子游戏 1 27 | 集合划分问题 27 | 大数平方根(字符串数组表示) 28 | 大数取模的二进制方法 28 | 线性方程组 A[][]X[]=B[] 28 | 追赶法...
iOS并发编程指南, 深入讲解iOS在编发编程中常用的GCD、NSOperation、NSOperationQueue的使用原理
面向对象:理解类(Class)、对象(Object)、实例变量(Instance Variables)、方法(Methods)、继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)等概念。 内存管理:了解ARC(Automatic Reference Counting,...
逆元,作为一种编程必备的基础知识。在此特地真诚的奉上认真整理、雪藏依旧的PDF文档,“老少皆宜”,希望能够使你有巨大而顶尖的收获!
ios开发GCD的dispatch_semaphore:1、常用函数及作用 2、信号量的用途:1》同步不同线程 2》当做锁来使用:3》控制同时执行的线程数: