用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 = ;
[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的更多相关文章
- iOS-button利用block封装按钮事件【runtime 关联】
用block封装最常用的就是网络请求的回调,其实也可以结合category封装button的按钮事件,同时利用runtime的对象关联: UIButton+wkjButton.h 文件 #import ...
- block传值以及利用block封装一个网络请求类
1.block在俩个UIViewController间传值 近期刚学了几招block 的高级使用方法,事实上就是利用block语法在俩个UIViewController之间传值,在这里分享给刚開始学习 ...
- 七、Block 封装代码
1.概念:封装代码块,调用的时候使用 2.声明 返回类型(^名字)(参数1,参数2..) = (参数类型 变量1,参数类型, 变量2){ }; int (^Sum)(int,int) = ^(int ...
- BLOCK封装带菊花的网络请求
#import <Foundation/Foundation.h> @class HttpRequestManager; typedef void(^httpRequestBlock) ( ...
- block要掌握的东西
/* block要掌握的东西 1> 如何定义block变量 int (^sumBlock)(int, int); void (^myBlock)(); 2> 如何利用block封装代码 ^ ...
- 黑马程序员_ Objective-c 之block、protocol学习笔记
一):block学习总结 block :用来保存一段代码. 1.block 特点: 1> Block封装了一段代码,可以在任何时候执行 2> Block可以作为函数或者函数的返回值, ...
- OC中的Block的那些事
Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动 ...
- iOS 学习 - 9.Block 入门
来自李明杰的视频. block 用来保存一段代码 block 的标志:^ block 跟函数很像: 1).可以保存代码 2).有返回值 3). 有形参 temp1:没有返回值.没有形参的 blo ...
- iOS开发——OC基础-ARC、BLOCK、协议
一.ARC ARC 是一种编译器特性!而不是IOS运行时特性,和JAVA中得垃圾回收机制完全不一样ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的 ...
随机推荐
- [BZOJ2791][Poi2012]Rendezvous
2791: [Poi2012]Rendezvous Time Limit: 25 Sec Memory Limit: 128 MBSubmit: 95 Solved: 71[Submit][Sta ...
- TC SRM 593 DIV2 1000
很棒的DP,不过没想出,看题解了..思维很重要. #include <iostream> #include <cstdio> #include <cstring> ...
- Android -- 闹钟服务的使用(单次闹钟)
1. 效果图
- FMS Camera对象设置说明
目录: 1.setQuality(Camera.setQuality方法)2.quality(Camera.quality属性)3.setMode(Camera.setMode方法)4.onActiv ...
- 纪念逝去的岁月——C/C++字符串反转
几年前,我还不会写这个 输入:hello world 输出:dlrow olleh 代码 #include <stdio.h> #include <string.h> void ...
- DataContractJsonSerializer deserialize stream
var response = await httpClient.PostAsync(endpoint, new FormUrlEncodedContent(parameters)); var resu ...
- Number Sequence
Number Sequence A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) ...
- ./*** > /dev/null 2>&1
转载:http://dongwei.iteye.com/blog/322702 shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义 ...
- CWnd与HWND的简单辨析
今天在写一个小的网络应用,需要用到HWND类型的一个参数.而程序中有的“窗口操作句柄”只有一个CWnd类型的指针.这俩不都是“窗口句柄”么?而且反正都是地址直接转换使用如何?结果出现了调用失效的情况. ...
- SQL server 子查询、设置主键外键、变量及变量查询
一.子查询 子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这 ...