IOS 使用block完成网络请求的自定义类BlockURLConnection
一,头文件
#import <Foundation/Foundation.h>
//定义下载中block类型
typedef void(^ProcessBlock) (NSURLResponse *response,NSData *data,NSError *error);
//定义下载完成block类型
typedef void(^CompletionBlock) (NSURLResponse *response,NSData *data,NSError *error);
@interface BlockURLConnection : NSURLConnection<NSURLConnectionDataDelegate>
+(BlockURLConnection *)sendAsynchronousRequest:(NSURLRequest *)request ProcessBlock:(ProcessBlock)process CompletionBlock:(CompletionBlock)completion;
@end
二,实现部分
#import "BlockURLConnection.h"
@interface BlockURLConnection()
@property (nonatomic,strong ) NSError *error;
@property (nonatomic,strong ) NSMutableData *data;
@property (nonatomic,strong ) NSURLResponse *response;
@property (nonatomic,strong ) ProcessBlock process;
@property (nonatomic,strong ) CompletionBlock completion;
@end
@implementation BlockURLConnection
+(BlockURLConnection *)sendAsynchronousRequest:(NSURLRequest *)request ProcessBlock:(ProcessBlock)process CompletionBlock:(CompletionBlock)completion
{
BlockURLConnection *connection=[[BlockURLConnection alloc]initWithRequest:request delegate:self];
connection.process=process;
connection.completion=completion;
return connection;
}
-(id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate
{
//指定网络链接的代理是自己
if (self=[super initWithRequest:request delegate:self]) {
;
}
return self;
}
//收到链接错误信息
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
self.error=error;
}
//收到网络响应信息
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.response=response;
self.data=[NSMutableData data];
}
//收到网络消息
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.data appendData:data];
self.process(self.response,data,self.error);
}
//完成接受网络消息
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
self.completion(self.response,self.data,self.error);
}
@end
IOS 使用block完成网络请求的自定义类BlockURLConnection的更多相关文章
- iOS中使用block进行网络请求回调
iOS中使用block进行网络请求回调 HttpRequest.h // // HttpRequest.h // UseBlockCallBack // // Created by Michael o ...
- iOS开发——post异步网络请求封装
IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异 ...
- iOS 多个异步网络请求全部返回后再执行具体逻辑的方法
对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...
- iOS NSURLConnection和异步网络请求
在日常应用中,我们往往使用AFNetworking等第三方库来实现网络请求部分.这篇文章会简要地介绍一下如何使用NSURLConnection来进行异步的网络请求. 我们先看一个小demo - (vo ...
- iOS 处理多个网络请求的并发的情况
如何处理多个网络请求的并发的情况 一.概念 1.并发 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配 ...
- ios MVVM实践 刷新网络请求+tableView展示数据
[实现效果] [目录结构相关] 此示例展示用的是MVVM结构形式,表述如下 M:数据Model的存储,可以用来对属性进行处理.(即胖model概念,上图中xx万人订阅这个处理方法写在Model内) V ...
- iOS 自己封装的网络请求,json解析的类
基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...
- iOS项目中的网络请求和上下拉刷新封装
代码地址如下:http://www.demodashi.com/demo/11621.html 一.运行效果图 现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此对 ...
- 移动开发在路上-- IOS移动开发 五 网络请求封装
接着上次的讲,这次我们讲 网络请求的封装 打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...
随机推荐
- android入门之: SharedPreferences
读取数据: 保存数据: +++++++++++++++++++方法详解++++++++++++++++++++++++++++++ SharedPreferences综述: 使用getSharedPr ...
- cf------(round)#1 C. Ancient Berland Circus(几何)
C. Ancient Berland Circus time limit per test 2 seconds memory limit per test 64 megabytes input sta ...
- JDK1.7-LinkedList循环链表优化
最近在看jdk1.7的时候,发现LinkedList 和1.6中的变化. 首先,简单介绍一下LinkedList: LinkedList是List接口的双向链表实现.由于是链表结构,所以长度没有限制: ...
- mysql 添加字段、删除字段、调整字段顺序 转
ALTER TABLE — 更改表属性添加字段: alter table `user_movement_log`Add column GatewayId int not null default 0 ...
- CentOS命令登录MySQL时,报错ERROR 1045 (28000):
CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解 ...
- was7中文redhat6上安装出现中文乱码解决方案
转:http://blog.csdn.net/w1985g/article/details/8789378 在rhel-server-6.1-x86_64上安装WebSphere 7时,安装界面出现中 ...
- Future 模式介绍
假设一个任务执行需要花费一些时间,为了省去不必要的等待时间,可以先获取一个提货单,即future,然后继续处理别的任务,知道货物到达,即任务完成得到结果,此时可以使用提货单提货,即通过future得到 ...
- Windows API调用外部程序
要在应用程序中启动其他的应用程序,有3个函数可以使用,下面我一一说说他们(我以打开D:\Program Files\zeecalls\目录下的zeecalls.exe应用程序为例): 1.Winexe ...
- call,apply,bind函数
一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 var Dog=function(){ this.n ...
- Android窃取用户信息新思路
0×01 我们能得到哪些android手机上的app敏感信息手机上的app敏感信息◦通讯录,通讯记录,短信◦各种app的帐号密码,输入信息资料等◦各种影音资料,照片资料◦等等0×02 我们有哪些方法 ...