`
wfkbyni
  • 浏览: 86960 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

iOS中使用block进行网络请求回调

 
阅读更多
转自: http://www.tuicool.com/articles/JFRfmq



//
//  HttpRequest.h
//  UseBlockCallBack
//
//  Created by Michael on 2/13/14.
//  Copyright (c) 2014 EIMS. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef void (^FinishBlock)(NSString *dataString);

@interface HttpRequest : NSObject<NSURLConnectionDataDelegate>

@property (strong, nonatomic) NSMutableData *resultData;
@property (strong, nonatomic) FinishBlock finishBlock;

+ (void)postRequestWithURL:(NSString *)urlStr
                 paramters:(NSString *)paramters
              finshedBlock:(FinishBlock)block;

@end

-----------------------------------------------------------------------



//
//  HttpRequest.m
//  UseBlockCallBack
//
//  Created by Michael on 2/13/14.
//  Copyright (c) 2014 EIMS. All rights reserved.
//

#import "HttpRequest.h"

@implementation HttpRequest

+ (void)postRequestWithURL:(NSString *)urlStr
                 paramters:(NSString *)paramters
              finshedBlock:(FinishBlock)block
{
    HttpRequest *httpRequest = [[HttpRequest alloc]init];
    httpRequest.finishBlock = block;
   
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *requset = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
    [requset setHTTPBody:[paramters dataUsingEncoding:NSUTF8StringEncoding]];
   
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:requset delegate:httpRequest];
    NSLog(connection ? @"连接创建成功" : @"连接创建失败");
}
/**
*  接收到服务器回应的时回调
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    if (!self.resultData) {
        self.resultData = [[NSMutableData alloc]init];
    } else {
        [self.resultData setLength:0];
    }
   
    if ([response respondsToSelector:@selector(allHeaderFields)]) {
        NSDictionary *dic = [httpResponse allHeaderFields];
        NSLog(@"[network]allHeaderFields:%@",[dic description]);
    }
}
/**
*  接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.resultData appendData:data];
}
/**
*  数据传完之后调用此方法
*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *resultStr = [[NSString alloc]initWithData:self.resultData
                                               encoding:NSUTF8StringEncoding];
    if (self.finishBlock) {
        self.finishBlock(resultStr);
    }
}
/**
*  网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
*/
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"network error : %@", [error localizedDescription]);
   
    if (self.finishBlock) {
        self.finishBlock(nil);
    }
}


@end

-----------------------------------------------------------------------

[HttpRequest postRequestWithURL:@"http://www.baidu.com"
                          paramters:@""
                       finshedBlock:^(NSString *dataString) {
                           NSLog(@"finish callback block, result: %@", dataString);
}];
分享到:
评论

相关推荐

    IOS block回调代码实例Demo

    总之,"IOS block回调代码实例Demo"是一个很好的学习资源,它展示了如何在iOS应用中使用Block进行回调,这对于理解和掌握iOS开发中的异步编程至关重要。通过深入研究这个Demo,开发者可以更好地运用Block来优化代码...

    iOS的block回调

    在iOS开发中,我们经常使用Block作为回调机制,特别是在处理网络请求、动画效果或异步任务时。比如,当我们使用`NSURLSession`进行网络请求时,可以设定一个completion handler(完成处理器),这是一个Block,当...

    ios-block 回调.zip

    "ios-block 回调.zip"中的"CallbackDemo"很可能是展示了一个关于如何在iOS应用中使用Block进行回调的实例。 Block的基本结构由`^`符号开启,后面跟着返回类型(如果有的话),接着是参数列表,最后用`{}`包裹实现的...

    ios-block回调 仅仅是回调.zip

    1. **网络请求回调**:可能使用了NSURLSession或AFNetworking等库,通过设置一个Block来处理网络请求的成功或失败情况,接收返回的数据。 2. **GCD(Grand Central Dispatch)的使用**:可能使用dispatch_async或...

    iOS Block使用教程

    - 在网络请求中,Block常用来处理请求的完成回调,例如AFNetworking库的`GET`和`POST`方法。 - 通过设置success和failure Block,我们可以在请求成功或失败时执行相应的代码逻辑,实现异步处理网络数据。 7. **...

    ios-Scrollview 滚动选择菜单block回调.zip

    总之,`ios-Scrollview 滚动选择菜单block回调.zip`示例教会了我们如何利用`UIScrollView`创建一个可滚动的菜单,并通过Block实现回调机制,这在iOS应用开发中是一个常见的需求。通过深入理解并实践这一技术,开发者...

    block回调测试

    在“BlockTest”项目中,我们可能遇到的问题是如何正确地将参数传递给Block并在回调中使用。以下是一些注意事项: 1. 引用类型:如果Block内部需要修改外部变量,必须确保该变量是强引用(__strong)或者使用弱引用...

    iOS块回调代替代理模式演示

    在iOS中,我们经常在网络请求、动画等异步操作中看到块的使用。 下面我们将详细探讨如何使用块回调来替代代理模式: 1. **定义Block类型** 首先,我们需要定义一个Block类型,它将代表我们的回调。例如,我们可以...

    Delegate&Block作回调

    Block在回调中非常方便,因为它可以直接在定义回调的地方编写执行逻辑,使得代码更加紧凑和易读。例如,我们在网络请求中可以使用Block来处理成功或失败的情况,使得异步编程更加直观。 Block可以捕获和存储其定义...

    ios-block 多参数传值.zip

    在Objective-C或Swift中,Block通常用于回调,例如网络请求、定时器或者GCD(Grand Central Dispatch)中。例如,当我们使用AFNetworking进行网络请求时,可以设置一个Block来处理响应数据: ```objc ...

    ios-网络请求封装.zip

    本项目"ios-网络请求封装.zip"旨在提供一种高效、便捷的网络请求解决方案,通过创建一个网络数据工具,来统一管理并简化项目中的网络请求操作。下面将详细介绍这个网络请求封装的过程以及相关知识点。 首先,我们要...

    swift-EasyPermission封装了开发中常用的权限请求的代码使用Block进行回调处理

    这里,`requestCameraPermission`方法接收一个Block作为参数,Block中会回调权限请求的结果,`granted`表示用户是否授予了权限。 其次,`EasyPermission`支持多种权限的请求,包括但不限于: - `requestCamera...

    ios-封装GET、POST请求(基于AFNetworking).zip

    本项目"ios-封装GET、POST请求(基于AFNetworking).zip"就是针对AFNetworking进行二次封装,简化了GET和POST请求的使用方式,使得开发者能够更加高效地进行网络编程。 首先,我们来看一下AFNetworking的核心组件。...

    ios-block反向传值.zip

    例如,在网络请求中,我们可能在回调Block中处理接收到的数据: ```objc [AFNetworking GET:@"https://example.com/data" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable response...

    iOS Http 网络请求(目前最流行的AFNetworking)

    在iOS开发中,进行HTTP网络请求是不可或缺的一部分,而AFNetworking是目前最流行、最广泛使用的网络库之一。本文将详细介绍如何使用AFNetworking进行HTTP网络请求,并深入探讨其核心概念和使用方法。 AFNetworking...

    ios Block和代理的对比

    在实际开发中,Block常用于简单的回调和异步处理,如网络请求的完成回调;代理则适用于复杂的组件交互,如UITableView的数据源和代理方法。理解并熟练运用这两种机制,能帮助开发者写出更加高效、灵活的代码。通过...

    ios-网络请求.zip

    使用completionHandler或者block来处理回调结果。 4. **数据任务(Data Tasks)**: URLSession的dataTask用于获取服务器返回的数据,通常用于获取JSON或XML等格式的响应。 5. **下载任务(Download Tasks)**: ...

    block简单回调,

    - "BlockDemo"这个文件很可能是包含一个Block的简单示例代码,可能展示了如何定义Block,如何捕获变量,以及如何在其他函数或方法中使用Block进行回调。 总结来说,Block是iOS开发中的重要组成部分,它提供了灵活...

    一款优秀的iOS网络封装框架(基于AFN封装)

    AFNetworking的API设计简洁明了,支持Block回调,使得网络请求处理更加直观。 **YBNetwork封装框架特性** 1. **简单易用**:YBNetwork将AFNetworking的复杂API进行了封装,提供更简单的接口,使得开发者可以快速...

    网络请求第三方框架

    在IT行业中,网络请求是应用程序与服务器之间进行数据交换的关键技术。为了简化这一过程,开发者通常会使用第三方网络请求框架,这些框架提供了便捷、高效且易于使用的API来处理HTTP请求。本篇将深入探讨三个知名的...

Global site tag (gtag.js) - Google Analytics