文档章节

仿AFNetworking

 郭建军oo
发布于 2015/08/26 11:12
字数 405
阅读 12
收藏 1

#import "GJJHttpRequest.h"


@implementation GJJHttpRequest

- (void)dealloc {

    self.myFailedBlock = nil;

    self.mySuccessBlock = nil;

    

    [_httpRequest release];

    self.downloadData = nil;

    [super dealloc];

}

- (instancetype)init {

    if (self = [super init]) {

        //初始化 数据对象

        self.downloadData = [[[NSMutableData alloc] init] autorelease];

    }

    return self;

}

- (void)downloadDataWithUrl:(NSString *)urlStr success:(DownloadSuccessBlock)successBlock failed:(DownloadFailedBlock)failedBlock{

    if (_httpRequest) {

        [_httpRequest release];

        _httpRequest = nil;

    }

    //保存block 否则 block 就会随时释放

    self.mySuccessBlock = successBlock;

    self.myFailedBlock = failedBlock;

    

    

    //创建请求

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: urlStr]];

    //创建 下载连接

    _httpRequest = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    //一点创建 下载连接 就会启动一个线程去专门下载数据

}


#pragma mark - post


- (void)postDataWithUrl:(NSString *)url paramString:(NSString *)paramStr success:(DownloadSuccessBlock)successBlock failed:(DownloadFailedBlock)failedBlock {

    if (_httpRequest) {

        [_httpRequest release];

        _httpRequest = nil;

    }

    //保存block

    self.mySuccessBlock = successBlock;

    self.myFailedBlock = failedBlock;

    

    //创建可变请求

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];

    

    //设置请求方式

    request.HTTPMethod = @"POST";

    //设置请求头

    //设置请求的类型(请求体提交的数据的格式)

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

    //提交 参数(username=xiaohong&password=123456放在 请求体中进行提交)

    //把参数 放入 请求体

    // 参数拼接的字符串转化为 NSData

    NSData *data = [paramStr dataUsingEncoding:NSUTF8StringEncoding];

    request.HTTPBody = data;

    //设置请求体的长度

    [request setValue:[NSString stringWithFormat:@"%ld",data.length] forHTTPHeaderField:@"Content-Length"];

    //建立连接请求

    _httpRequest = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    

}


#pragma mark - NSURLConnectionDataDelegate

//客户端 接收到 服务器的响应

//服务器将要 发送数据

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    //清空旧数据

    [self.downloadData setLength:0];

}

//接收数据

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [self.downloadData appendData:data];

}

//下载完成

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    

    //下载完成 之后 要回调block 解析数据

    if (self.mySuccessBlock) {

        //调用block 把下载数据传入

        self.mySuccessBlock(self.downloadData);

    }

}

//下载失败

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

    if (self.myFailedBlock) {

        //回调

        self.myFailedBlock(error);

    }

}


@end


© 著作权归作者所有

粉丝 0
博文 2
码字总数 770
作品 0
郑州
程序员
私信 提问
关于ios应用引入AFNetworking后编译报错的问题

/Users/rzz/Desktop/iphone-app/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h:29:1: error: unknown type name 'NS_ASSUME_NONNULL_BEGIN' NS_ASSUME_NONNULL_BEGIN ^ /User......

骑毛驴的王子
2015/11/09
1K
0
iOS下的Http库AFNetworking

在iOS下开发一直是用ASIHTTPRequest库,ASIHTTPRequest已经停止更新,看了这个文章http://www.oschina.net/news/61416/github-top-100-objective-c-projects (原文https://github.com/Aufr......

vane_
2015/04/11
184
0
OC使用AFNetWorking框架GET方法上传参数格式不是JSON串

iOS的APP端使用AFNetWorking这个框架连接服务器, 项目约定使用GET方法传参, 现在遇到问题是:iOS传的参数要组合成“字典”放入AFNetWorking,然后用AFNetWorking开始请求, 而AFNetWorking会...

Moses_Fu
2015/10/26
1K
0
关于在xcode项目中正确配置AFNetworking第三方库的问题

@红薯 你好,想跟你请教个问题: 最近在研究开源中国iphone客户端的源码 获益匪浅,然后我看到你网络通信模块用的是AFNetworking 上了github看了他的官方文档和好多其他的文档都说使用的是c...

zjhsdtc
2013/03/31
7.7K
1
CocoaPods 安装和使用教程

用淘宝镜像像下载安装: $ gem sources --remove https://rubygems.org///等有反应之后再敲入以下命令$ gem sources -a https://ruby.taobao.org/ 为了验证你的Ruby镜像是并且仅是taobao,可...

Jack088
2015/05/26
22
0

没有更多内容

加载失败,请刷新页面

加载更多

Nervos CKB 脚本编程简介[1]:验证模型

CKB 脚本编程简介[1]: 验证模型 本文作者:Xuejie 原文链接:Introduction to CKB Script Programming 1: Validation Model 本文译者:Jason,Orange 译文链接:https://talk.nervos.org/t/c...

NervosCommunity
28分钟前
4
0
消息中间件——RabbitMQ的高级特性

前言 前面我们介绍了RabbitMQ的安装、各大消息中间件的对比、AMQP核心概念、管控台的使用、快速入门RabbitMQ。本章将介绍RabbitMQ的高级特性。分两篇(上/下)进行介绍。 消息如何保障100%的...

Java架构师ya七
今天
9
0
如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
今天
7
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部