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 ...
随机推荐
- C与C++在const用法上的区别
首先,C和C++在大体结构上不同,却在语法上相同. 所以在使用的时候,我们会时常遇到一些莫名其妙的问题,觉得语法上是正确的,但是编译的时候却出现一个红色的 error! 比如今天我遇到的这个有意思的 ...
- ARM中的总线
ARM中的总线用于不同部件之间的通信.有两种不同类型的设备连接到总线:ARM处理器,它是总线的主设备,拥有对总线的仲裁权,可以通过同一总线主动发起数据传输请求:外围器件,是总线的从设备,在总线上是被动 ...
- Permutation Sequence [LeetCode]
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- Merge k Sorted Lists [LeetCode]
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. S ...
- 自定义jQuery插件Step by Step
1.1.1 摘要 随着前端和后端技术的分离,各大互联网公司对于 Mobile First理念都是趋之若鹜的,为了解决网页在不同移动设备上的显示效果,其中一个解决方案就是Responsive Desig ...
- Oracle - PL/SQL Commands
第一章:日志管理 1.forcing log switches sql> alter system switch logfile; 2.forcing checkpoints sql> a ...
- 转:Nginx+Apache环境的安装与配置
转:http://www.server110.com/nginx/201404/8817.html 我们依然尽可能采用yum来安装我们需要的软件,由系统官方维护的软件,其安全性和稳定性都值得信赖,并且 ...
- FZU 2032 Log函数问题 模拟小数加法
题目链接:Log函数问题 2 / 49 Problem G FZU 2032 Log函数问题 不知道为什么...比赛时高精度难倒了一票人...成功搞出大新闻... 试了一下直接double相加超时,然 ...
- PHP分页类库
<?php /** * @title: Ekcms page分页类库 * @version: 1.0 * @author: perry <perry@1kyou.com> * @pu ...
- hadoop集群配置实例
1)ssh配置 http://allthingshadoop.com/2010/04/20/hadoop-cluster-setup-ssh-key-authentication/ 2) 修改打开文件 ...