研究了3天的block使用,今天终于写出了自己的第一个block接口请求,完整的接口调用和定义,
首先在interface中用dispatch——queue来处理请求,然后通过block进行回调,
再在调用的时候处理block回调回来的数据就行了,非常的简洁,代码量减少很多,且效率极高,嘿嘿。
第一步定义要回调的block
typedef void (^getCommentList)(id data,BOOL succeed);
data就是回调时传过去的服务器数据,succeed表示是否成功,当然也可以定义其它参数了第二步用dispatch来创建队列请求数据
dispatch_queue_t queue = dispatch_queue_create("GetCommentList", NULL);
dispatch_async(queue, ^(){
NSURL *url=[NSURL URLWithString:URL_GetComments];
ASIFormDataRequest *request=[[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
[request setPostValue:uid forKey:UnloginView_id];
[request start];
NSMutableArray *content =[[request responseString] JSONValue];
block(content,YES);
});
dispatch_release(queue);
content就是请求回来的数据,经过解析后用block();回调。第三步在需要创建请求的类里面实现这个方法
[MP_InterfaceShare getCommentList:str_mid block:^(id data, BOOL succeed) {
self.arr_objects = (NSMutableArray *)data;
dispatch_async(dispatch_get_main_queue(), ^(){
[self initWithControl];
[self stopTheHoldFire];
});
}];
这里的data就是刚才的content,如果需要处理UI更新的话就使用dispatch_get_main_queue回到主线程。这样就完整了来了一次请求和接受数据。
哇 哦。
发表评论
-
IOS开发 多线程 一
2013-11-19 11:46 507原文:http://blog.csdn.net/develo ... -
IOS 学习 Key-value coding
2013-11-19 10:56 833原文:http://blog.csdn.net/develo ... -
socket编程 详解
2012-08-28 08:57 1101对TCP/IP、UDP ... -
iOS ASIHTTPRequest详解 非常强大
2012-08-27 13:20 2439ASIHTTPRequest对CFNetwork API ... -
今天看了ps的简介,决定一定要把它给学会,首先了解一下基础知识
2012-08-22 00:01 7671.位图图像的概念 位图图像使用像素来表示图像,因此也 ... -
SDWebImage使用,图片加载和缓存
2012-07-04 11:44 2434SDWebImage托管在github上。https:/ ... -
coredata 理解
2012-06-15 13:08 1403昨天开始认真的看coredata的用法,今天终于明白的其中的 ... -
#ifndef、#def、#endif说明
2012-06-13 13:43 898你所遇到的这几个 ... -
ios 数据存储的四种常用方式NSKeyedArchiver/NSUserDefaults/Writ
2012-06-13 10:49 1373OK,今天Himi介绍游戏 ... -
AVAudioPlayer 音频播放器 使用 教程
2012-06-05 14:33 1247IOS中有三种播放音频的方式:AVAudioPlaye ... -
使用iOS手势UIGestureRecognizer
2012-06-05 10:10 1246UIKit中包含了UIGestureRecognizer ... -
NSAutoReleasePool
2012-05-28 14:40 782好记性不如烂博客. 今天需要记录的是关于NSAutoR ... -
NSLocalizedString 实现国际化
2012-05-28 11:23 854一、获取系统所支持的国际化信息 在国际化之前,你可以在ip ... -
自定义 UIColor baseView 父类子类方法名 不能重复
2012-05-24 11:04 861原来是因为方法名字重复了,因为baseview的方法名和 ... -
Android图片处理(Matrix,ColorMatrix)
2012-05-22 09:24 875在编程中有时候需要 ... -
objectForKey与valueForKey在NSDictionary中的差异
2012-05-18 15:38 807从 NSDictionary 取值的时候有两个方法,ob ... -
symbol(s) not found for architexture i386 路径错误
2012-05-16 09:55 1573昨天这个错误又出现 ... -
symbol(s) not found for architexture i386 报错
2012-05-15 18:40 770我靠啊,今天下午出现了个这个错误,找了好多资料,发现让添加li ... -
symbol(s) not found for architexture i386 报错
2012-05-15 18:40 0我靠啊,今天下午出现了个这个错误,找了好多资料,发现让添加li ... -
推送 证书 联机调试
2012-05-15 15:16 853联机调试出现问题, ...
相关推荐
1、通过dispatch_barrier_(a)sync添加的block会等待前边所有的block执行完(不包括回调)才执行。 2、在其后添加的block会在dispatch_barrier_(a)sync添加的block执行完之后(不包括回调)再执行; 不同点: 1、...
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ // 执行任务 }); ``` **异步与同步提交** - **异步任务**:不会阻塞当前线程,可以立即返回...
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 这里的代码将在默认优先级的全局队列中异步执行 }); ``` 4. **主队列**:主队列是特殊的串行队列,所有的任务都会在主线程...
dispatch_queue_t是GCD的核心,分为串行队列(serial queue)和并行队列(concurrent queue)。串行队列一次只执行一个任务,而并行队列则可以同时处理多个任务。在iOS中,有全局并行队列和主队列两种。全局并行队列...
1. 同步执行任务:dispatch_sync(dispatch_queue_t queue, dispatch_block_t block); 参数说明:queue是队列,block是任务。同步执行任务只能在当前线程中执行任务,具备开启新线程的能力。 2. 异步执行任务:...
串行队列是一种只能处理一个任务的队列,可以由用户调用dispatch_queue_create创建。并行队列可以同时处理多个任务,通常使用系统预定义的并行队列,即全局队列(Global Concurrent Dispatch Queues)。主队列是一个...
- 有多个优先级可供选择,如` DISPATCH_QUEUE_PRIORITY_HIGH`、`DISPATCH_QUEUE_PRIORITY_DEFAULT`和`DISPATCH_QUEUE_PRIORITY_LOW`。 5. **GCD的时间控制**: - `dispatch_after()`函数允许在指定延迟后执行任务...
- 通过`dispatch_queue_create`创建自定义队列并使用`dispatch_async`异步执行任务。 - 使用`dispatch_get_main_queue`和`dispatch_get_global_queue`对比不同队列上的任务执行情况。 - `dispatch_after`的延时执行...
- 创建DispatchQueue:`dispatch_queue_create()`用于创建自定义队列,`dispatch_get_main_queue()`和`dispatch_get_global_queue()`获取主线程队列和全局并行队列。 - 异步/同步提交任务:`dispatch_async()`异步...
- 使用`dispatch_queue_create`创建队列,`dispatch_async`异步提交Block到队列执行,可以实现任务的并发执行。 - `dispatch_sync`同步提交Block,会在当前队列上等待Block执行完成。 6. **Block与网络请求** - ...
在iOS开发中,Block常用于异步操作的回调,例如网络请求、定时器或者GCD(Grand Central Dispatch)中。在描述的"Demo块"中,我们可能看到一个简单的例子,如网络请求完成后,通过Block传递数据回主线程进行更新UI。...
- 并行队列:`dispatch_queue_create("queueName", DISPATCH_QUEUE_CONCURRENT)` 2. 将任务添加到队列: - 异步任务:`dispatch_async(queue, block)` - 同步任务:`dispatch_sync(queue, block)` 3. 主队列:`...
dispatch_set_target_queue(customQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)); // 设置队列的优先级 ``` 然后,我们可以在这个队列上提交任务,GCD会自动根据设定的并发数来调度任务...
并发队列有不同优先级,包括`DISPATCH_QUEUE_PRIORITY_HIGH`、`DISPATCH_QUEUE_PRIORITY_DEFAULT`和`DISPATCH_QUEUE_PRIORITY_LOW`,以及`DISPATCH_QUEUE_PRIORITY_BACKGROUND`。高优先级队列的任务会优先执行。 9...
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 异步执行的任务 }); ``` 3. 视图动画:Block可以用于控制动画执行的代码。 ```objc [UIView animateWithDuration:0.5 ...
DispatchQueue.main.async { // 更新UI } } ``` 代理,即协议(Protocol),是Objective-C和Swift中的一个重要概念,它定义了一组方法,实现了这些方法的对象可以作为代理来接收特定的消息。代理模式常用于组件...
1. dispatch_queue_t queue = dispatch_queue_create(“com.dispatch.serial”, DISPATCH_QUEUE_SERIAL); //生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ // 执行耗时操作 dispatch_sync(dispatch_get_main_queue(), ^{ // 更新UI }); }); ``` ...
异步OC 用Objective-C重写... 代替熟悉的GCD语法: dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 ), ^{ NSLog ( @" A: This is run on the background " ); dispatch_async ( dis