GCD常用方法

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];//异步下载
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值