用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 = ;
[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 = ;
postRequest.delegate = self;
for (int i = ; 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

用Block封装ASIHttpRequest的更多相关文章

  1. iOS-button利用block封装按钮事件【runtime 关联】

    用block封装最常用的就是网络请求的回调,其实也可以结合category封装button的按钮事件,同时利用runtime的对象关联: UIButton+wkjButton.h 文件 #import ...

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

    1.block在俩个UIViewController间传值 近期刚学了几招block 的高级使用方法,事实上就是利用block语法在俩个UIViewController之间传值,在这里分享给刚開始学习 ...

  3. 七、Block 封装代码

    1.概念:封装代码块,调用的时候使用 2.声明 返回类型(^名字)(参数1,参数2..) = (参数类型 变量1,参数类型, 变量2){ }; int (^Sum)(int,int)  = ^(int ...

  4. BLOCK封装带菊花的网络请求

    #import <Foundation/Foundation.h> @class HttpRequestManager; typedef void(^httpRequestBlock) ( ...

  5. block要掌握的东西

    /* block要掌握的东西 1> 如何定义block变量 int (^sumBlock)(int, int); void (^myBlock)(); 2> 如何利用block封装代码 ^ ...

  6. 黑马程序员_ Objective-c 之block、protocol学习笔记

    一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值, ...

  7. OC中的Block的那些事

    Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动 ...

  8. iOS 学习 - 9.Block 入门

    来自李明杰的视频. block 用来保存一段代码 block 的标志:^ block  跟函数很像: 1).可以保存代码  2).有返回值  3). 有形参 temp1:没有返回值.没有形参的 blo ...

  9. iOS开发——OC基础-ARC、BLOCK、协议

    一.ARC ARC 是一种编译器特性!而不是IOS运行时特性,和JAVA中得垃圾回收机制完全不一样ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的 ...

随机推荐

  1. BZOJ 3339 & 莫队+"所谓的暴力"

    题意: 给一段数字序列,求一段区间内未出现的最小自然数. SOL: 框架显然用莫队.因为它兹瓷离线. 然而在统计上我打了线段树...用&维护的结点...400w的线段树...然后二分查找... ...

  2. Android Service与Activity之间通信

    主要分为: 通过Binder对象 通过broadcast(广播)的形式 Activity调用bindService (Intent service, ServiceConnection conn, i ...

  3. [题解+总结]NOIP动态规划大合集

    1.前言 NOIP2003-2014动态规划题目大合集,有简单的也有难的(对于我这种动态规划盲当然存在难的),今天就把这些东西归纳一下,做一个比较全面的总结,方便对动态规划有一个更深的理解. 2.NO ...

  4. [深入浅出WP8.1(Runtime)]文本块(TextBlock)

    4.3 文本块(TextBlock) 文本块(TextBlock)控件是用于显示少量文本的轻量控件,可以通过TextBlock呈现只读的文本,你可以把TextBlock控件理解为一种纯文本的展示控件. ...

  5. URAL 1203. Scientific Conference(瞎搞)

    题目链接 本来觉得这不是经典的贪心吗..果断水一次,wa了,看了看discuss,发现貌似不好水,土土的DP了一下,复杂度很高了,又T了...然后想想单调队列,二分什么的...不好往上加,直接搞了标记 ...

  6. 瀑布流 &留言板

    实例:瀑布流 留言板(一)瀑布流瀑布流实现原理分析1.ajax文件内容function ajax(method, url, data, success) {    var xhr = null;   ...

  7. POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files

    一.概述 HSSF和XSSF是apache开源项目POI中实现java面向Excel的两个接口.两者的区别在于,HSSF适用于Excel '97(-2007)文档,而XSSF适用于Excel 2007 ...

  8. jquery中对动态生成的标签响应click事件(二)…与ajax交互使用

    <%@ page language="java" contentType="text/html; charset=GB18030" pageEncodin ...

  9. 如何设置div的宽度为100%-xx px?

    如何设置div的宽度为100%-xx px? 参见如下帖子:http://stackoverflow.com/questions/15183069/div-width-100-10px-relativ ...

  10. Java实现智能机器自动操作电脑

    package com.tz.util; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event. ...