用Block封装ASIHttpRequest

用Block封装ASIHttpRequest

横方便的网络请求方法,不用每次都写代理方法.使代码先得很整齐,不会凌乱.
接口部分:
//
//  LYHASIRequestBlock.h
//  ASIBlockTest
//
//  Created by Charles Leo on 14-7-23.
//  Copyright (c) 2014年 Charles Leo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"
typedef void (^RequestBlock) (void);
@interface LYHASIRequestBlock : NSObject <ASIHTTPRequestDelegate>
{
    ASIHTTPRequest * getRequest;
    ASIFormDataRequest * postRequest;
    NSURL * url;
    RequestBlock finishBlock;
    RequestBlock failBlock;
    RequestBlock startBlock;
    NSString * requestType;
}

//接收到的数据
@property (strong,nonatomic) NSData * receiveData;
//请求完成的block
- (void)didFinishBlock:(RequestBlock)block;
//请求失败的block
- (void)didFailedBlock:(RequestBlock)block;
//请求开始的block
- (void)didStartBlock:(RequestBlock)block;
//取消请求
- (void)cancelRequst;
//get请求方法
- (void)getRequest:(NSString *)getUrl;
//post请求方法
- (void)postRequest:(NSString *)postUrl andKeys:(NSArray *)keyArray andValues:(NSArray *)valueArray;
@end

实现部分:
//
//  LYHASIRequestBlock.m
//  ASIBlockTest
//
//  Created by Charles Leo on 14-7-23.
//  Copyright (c) 2014年 Charles Leo. All rights reserved.
//

#import "LYHASIRequestBlock.h"

@implementation LYHASIRequestBlock

- (void)getRequest:(NSString *)getUrl
{
    requestType = @"GET";
    getRequest  = [[ASIHTTPRequest alloc]initWithURL:[NSURL URLWithString:getUrl]];
    getRequest.delegate = self;
    getRequest.timeOutSeconds = 15;
    [getRequest startAsynchronous];
}
#pragma mark -GET请求的代理方法
//开始请求
- (void)requestStarted:(ASIHTTPRequest *)request
{
    startBlock();
}
//请求完成
- (void)requestFinished:(ASIHTTPRequest *)request
{
    self.receiveData = request.responseData;
    finishBlock();
}
//请求失败
- (void)requestFailed:(ASIHTTPRequest *)request
{
    failBlock();
}
//post请求
-(void)postRequest:(NSString *)postUrl andKeys:(NSArray *)keyArray andValues:(NSArray *)valueArray
{
    postRequest = [[ASIFormDataRequest alloc]initWithURL:[NSURL URLWithString:postUrl]];
    postRequest.timeOutSeconds = 15;
    postRequest.delegate = self;
    for (int i = 0; i<keyArray.count; i++) {
        [postRequest setPostValue:[valueArray objectAtIndex:i] forKey:[keyArray objectAtIndex:i]];
    }
    [postRequest setDidFinishSelector:@selector(didFinishPostRequest:)];
    [postRequest setDidStartSelector:@selector(didStartPostRequest:)];
    [postRequest setDidFailSelector:@selector(didFailPostRequest:)];
    [postRequest startAsynchronous];
}

#pragma mark - POST请求的代理方法
//请求开始
- (void)didStartPostRequest:(ASIFormDataRequest *)request
{
    startBlock();
}
//请求完成
- (void)didFinishPostRequest:(ASIFormDataRequest *)request
{
    finishBlock();
}
//请求失败
- (void)didFailPostRequest:(ASIFormDataRequest *)request
{
    failBlock();
}

//设置Blocks
//设置开始块
- (void)didStartBlock:(RequestBlock)block
{
    [startBlock release];
    startBlock = [block copy];
}
//设置完成块
-(void)didFinishBlock:(RequestBlock)block
{
    [finishBlock release];
    finishBlock = [block copy];
}
//设置失败块
-(void)didFailedBlock:(RequestBlock)block
{
    [failBlock release];
    failBlock = [block copy];
}
//取消请求
- (void)cancelRequst{
    if ([requestType isEqualToString:@"GET"])
    {
        [getRequest cancel];
    }
    else if([requestType isEqualToString:@"POST"])
    {
        [postRequest cancel];
    }
}

-(void)dealloc
{
    [getRequest release];
    [postRequest release];
    [startBlock release];
    [finishBlock release];
    [failBlock release];
    [super dealloc];
}
@end
时间: 2024-12-17 16:48:07

用Block封装ASIHttpRequest的相关文章

超级猜图,小case,运用知识点: storyboard block封装变化点 蒙板 模态model

最近这几天,不知道突然玩超级猜图玩疯了,最后觉得还是不过瘾,干脆下了ipa,运用素材自己写了一个,没想到居然实现了大部分功能,真开心,直接上图:     上代码,不足之处,还望牛人支出,不胜感激: 1 #import "JHViewController.h" 2 #import "JHAppDate.h" 3 4 @interface JHViewController () 5 { 6 NSArray *_arrayImage; // 内容数组 7 int _ind

Block学习一:基本用法,用block封装NSURLRequest异步请求

首先看下面这段代码: void (^myFirstBlock)(int theOne,int theTwo) = ^(int theOne,int theTwo){ NSLog(@"====%d",theOne+theTwo); }; myFirstBlock(100,300); void:指的时返回数据类型,myFirstBlock:指的是block的名称,后面两个是参数.等号右边的block的实现. 个人理解:block本身就是一个类,他的实例化就是一个对象,下面看看这个数据请求的

block传值以及利用block封装一个网络请求类

1.block在俩个UIViewController间传值 最近刚学了几招block 的高级用法,其实就是利用block语法在俩个UIViewController之间传值,在这里分享给初学者,同时也方便我自己理解.我们知道UINavigationController类管理UIViewController的时候,利用的是"栈"的思想,在这里不做过多解释,切入正题,假设我们现在有俩个UIViewController,viewC1和viewC2,viewC1比viewC2先进入到UINavi

用Block封装网络请求

#import <Foundation/Foundation.h> // 定义一个枚举typedef NS_ENUM(NSInteger) {    LY_GET,    LY_POST} URLRequestMethod;///定义返回block网络请求结果typedef void(^ResultBlock)(NSData *data,NSURLResponse *response,NSError *error); @interface LYNetWorkRequestManager : N

iOS_21团购_通过block对请求工具类的代理方法进行二次封装

最终效果图: [点评]提供的工具类DPAPI 在请求完毕后,使用的是代理机制,当一次请求成功或者失败时,会调用代理的相应方法 为了将点评提供的工具类DPAPI进行二次封装, 再次定义了一个block: typedef  void(^RequestDoneCallBackBlock)(id deals,NSError *err); 该block有两个参数, 分别是成功时,服务器返回的deals字典数组 另一个参数是:请求失败时,服务器返回的失败信息 两个参数分别对应代理的两个方法(即成功.失败时分

网络请求封装

网络请求封装 // // ASIHTTPRequest+Request.h // CloudShopping // // Created by sixiaobo on 14-7-9. // Copyright (c) 2014年 com.Uni2uni. All rights reserved. // #import "ASIFormDataRequest.h" #import "ASIDownloadCache.h" // downloadData是返回的数据,如

Block

OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 (2)利用block封装代码

第一部分 1.8 OC基础语法-Block

一.Block基本含义 Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多 二.Blocks的定义 Blocks的定义: int (^MySum)(int, int) = ^(int a, int b) { return a+b; }; 定义了一个叫MySum的blocks对象,它带有两个int参数,返回int.等式右边就是block

OC语言BLOCK和协议

一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 int (^SumBlock)(int, int); // 有参数,返回值类型为int void (^MyBlock)():// 无参数,返回值类型为空 (2)利用block封装代码 (3)Block访