`
sunqichao
  • 浏览: 28635 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

IOS block dispatch_queue

    博客分类:
  • IOS
阅读更多

研究了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 allocinitWithURL:url] autorelease];

        [request setPostValue:uid forKey:UnloginView_id];   

        [request start];

       NSMutableArray *content =[[request responseStringJSONValue];

        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回到主线程。

这样就完整了来了一次请求和接受数据。

哇 哦。

分享到:
评论

相关推荐

    dispatch_barrier_(a)sync

    1、通过dispatch_barrier_(a)sync添加的block会等待前边所有的block执行完(不包括回调)才执行。 2、在其后添加的block会在dispatch_barrier_(a)sync添加的block执行完之后(不包括回调)再执行; 不同点: 1、...

    iOS GCD开发总结整理

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ // 执行任务 }); ``` **异步与同步提交** - **异步任务**:不会阻塞当前线程,可以立即返回...

    Cocoa多线程编程之 block 与 dispatch quene

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 这里的代码将在默认优先级的全局队列中异步执行 }); ``` 4. **主队列**:主队列是特殊的串行队列,所有的任务都会在主线程...

    gcdTest下载图片 dispatch_async

    dispatch_queue_t是GCD的核心,分为串行队列(serial queue)和并行队列(concurrent queue)。串行队列一次只执行一个任务,而并行队列则可以同时处理多个任务。在iOS中,有全局并行队列和主队列两种。全局并行队列...

    iOS开发多线程-GCD介绍 - iOS知识库1

    1. 同步执行任务:dispatch_sync(dispatch_queue_t queue, dispatch_block_t block); 参数说明:queue是队列,block是任务。同步执行任务只能在当前线程中执行任务,具备开启新线程的能力。 2. 异步执行任务:...

    并发编程之Operation Queue和GCD

    串行队列是一种只能处理一个任务的队列,可以由用户调用dispatch_queue_create创建。并行队列可以同时处理多个任务,通常使用系统预定义的并行队列,即全局队列(Global Concurrent Dispatch Queues)。主队列是一个...

    ios gcd

    - 有多个优先级可供选择,如` DISPATCH_QUEUE_PRIORITY_HIGH`、`DISPATCH_QUEUE_PRIORITY_DEFAULT`和`DISPATCH_QUEUE_PRIORITY_LOW`。 5. **GCD的时间控制**: - `dispatch_after()`函数允许在指定延迟后执行任务...

    GCD常用和不常用API说明GCD-Demo-master.zip

    - 通过`dispatch_queue_create`创建自定义队列并使用`dispatch_async`异步执行任务。 - 使用`dispatch_get_main_queue`和`dispatch_get_global_queue`对比不同队列上的任务执行情况。 - `dispatch_after`的延时执行...

    ios 开发多线程

    - 创建DispatchQueue:`dispatch_queue_create()`用于创建自定义队列,`dispatch_get_main_queue()`和`dispatch_get_global_queue()`获取主线程队列和全局并行队列。 - 异步/同步提交任务:`dispatch_async()`异步...

    iOS Block使用教程

    - 使用`dispatch_queue_create`创建队列,`dispatch_async`异步提交Block到队列执行,可以实现任务的并发执行。 - `dispatch_sync`同步提交Block,会在当前队列上等待Block执行完成。 6. **Block与网络请求** - ...

    IOS block回调代码实例Demo

    在iOS开发中,Block常用于异步操作的回调,例如网络请求、定时器或者GCD(Grand Central Dispatch)中。在描述的"Demo块"中,我们可能看到一个简单的例子,如网络请求完成后,通过Block传递数据回主线程进行更新UI。...

    IOS应用源码之多线程编程.zip

    - 并行队列:`dispatch_queue_create("queueName", DISPATCH_QUEUE_CONCURRENT)` 2. 将任务添加到队列: - 异步任务:`dispatch_async(queue, block)` - 同步任务:`dispatch_sync(queue, block)` 3. 主队列:`...

    iOS控制多线程任务数量

    dispatch_set_target_queue(customQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)); // 设置队列的优先级 ``` 然后,我们可以在这个队列上提交任务,GCD会自动根据设定的并发数来调度任务...

    OC-并发队列在异步线程中执行

    并发队列有不同优先级,包括`DISPATCH_QUEUE_PRIORITY_HIGH`、`DISPATCH_QUEUE_PRIORITY_DEFAULT`和`DISPATCH_QUEUE_PRIORITY_LOW`,以及`DISPATCH_QUEUE_PRIORITY_BACKGROUND`。高优先级队列的任务会优先执行。 9...

    iOSblock方法的详细学习

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 异步执行的任务 }); ``` 3. 视图动画:Block可以用于控制动画执行的代码。 ```objc [UIView animateWithDuration:0.5 ...

    ios Block和代理的对比

    DispatchQueue.main.async { // 更新UI } } ``` 代理,即协议(Protocol),是Objective-C和Swift中的一个重要概念,它定义了一组方法,实现了这些方法的对象可以作为代理来接收特定的消息。代理模式常用于组件...

    iOS应用程序中通过dispatch队列控制线程执行的方法

    1. dispatch_queue_t queue = dispatch_queue_create(“com.dispatch.serial”, DISPATCH_QUEUE_SERIAL); //生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程

    关于block的一个demo

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ // 执行耗时操作 dispatch_sync(dispatch_get_main_queue(), ^{ // 更新UI }); }); ``` ...

    Async.OC:Objective-C中的语法糖,用于Grand Central Dispatch中的异步调度

    异步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

Global site tag (gtag.js) - Google Analytics