对iOS网络请求的容易封装,并且使用block回调函数方式
2014-03-23 00:27
513 查看
转自:http://www.myexception.cn/operating-system/1462106.html
对iOS网络请求的简单封装,并且使用block回调函数方式
// 废话不多说直接上代码
// RequestHttpClass.h文件
/*封装简单的异步请求*/
#import <Foundation/Foundation.h>
// 相当于定义一个函数指针
typedef void(^FinishLoadBlock)(NSData
*);
@interface RequestHttpClass : NSMutableURLRequest <NSURLConnectionDataDele
// 存储异步请求的数据
@property (nonatomic, retain) NSMutableData *data;
@property (nonatomic, retain) NSURLConnection *connection;
@property (nonatomic, copy)FinishLoadBlock block;
- (void)startAsync;
- (void)cancel;
@end
// RequestHttpClass.m 文件
#import "RequestHttpClass.h"
@implementation RequestHttpClass
-(void)startAsync {
self.data = [[NSMutableData alloc] init];
// 发起异步请求
self.connection = [NSURLConnection connectionWithRequest:self delegate:self];
}
- (void)cancel {
[self.connection cancel];
}
// 异步请求每次返回的数据
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.data appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"请求网络出错:%@",
error);
}
-(void) dealloc {
[_data release];
[super dealloc];
}
@end
-------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
// RequestData.h 文件
#import <Foundation/Foundation.h>
typedef void(^Completion)(id);
@interface RequestData : NSObject
// 访问天气预报接口
+ (void)getWeatherData:(NSDictionary *)params block: (Completion) block;
@end
// RequestData.m 文件
#import "RequestData.h"
#import "RequestHttpClass.h"
#define BASE_URL @"http://www.weather.com.cn/data/sk/"
@implementation RequestData
+ (void)getWeatherData:(NSDictionary *)params block:(Completion )block {
NSString *cityCode = [params objectForKey:@"code"];
NSString *urlstring = [BASE_URLstringByAppendingFormat:@"%@.html",cityCode];
RequestHttpClass *request = [RequestHttpClass requestWithURL:[NSURL URLWithString:urlstring]];
[request setHTTPMethod:@"GET"];
[request setTimeoutInterval:60];
request.block = ^(NSData *data) {
id ret = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
block(ret);
};
[request startAsync];
}
@end
对iOS网络请求的简单封装,并且使用block回调函数方式
// 废话不多说直接上代码
// RequestHttpClass.h文件
/*封装简单的异步请求*/
#import <Foundation/Foundation.h>
// 相当于定义一个函数指针
typedef void(^FinishLoadBlock)(NSData
*);
@interface RequestHttpClass : NSMutableURLRequest <NSURLConnectionDataDele
// 存储异步请求的数据
@property (nonatomic, retain) NSMutableData *data;
@property (nonatomic, retain) NSURLConnection *connection;
@property (nonatomic, copy)FinishLoadBlock block;
- (void)startAsync;
- (void)cancel;
@end
// RequestHttpClass.m 文件
#import "RequestHttpClass.h"
@implementation RequestHttpClass
-(void)startAsync {
self.data = [[NSMutableData alloc] init];
// 发起异步请求
self.connection = [NSURLConnection connectionWithRequest:self delegate:self];
}
- (void)cancel {
[self.connection cancel];
}
// 异步请求每次返回的数据
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.data appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"请求网络出错:%@",
error);
}
-(void) dealloc {
[_data release];
[super dealloc];
}
@end
-------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
// RequestData.h 文件
#import <Foundation/Foundation.h>
typedef void(^Completion)(id);
@interface RequestData : NSObject
// 访问天气预报接口
+ (void)getWeatherData:(NSDictionary *)params block: (Completion) block;
@end
// RequestData.m 文件
#import "RequestData.h"
#import "RequestHttpClass.h"
#define BASE_URL @"http://www.weather.com.cn/data/sk/"
@implementation RequestData
+ (void)getWeatherData:(NSDictionary *)params block:(Completion )block {
NSString *cityCode = [params objectForKey:@"code"];
NSString *urlstring = [BASE_URLstringByAppendingFormat:@"%@.html",cityCode];
RequestHttpClass *request = [RequestHttpClass requestWithURL:[NSURL URLWithString:urlstring]];
[request setHTTPMethod:@"GET"];
[request setTimeoutInterval:60];
request.block = ^(NSData *data) {
id ret = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
block(ret);
};
[request startAsync];
}
@end
相关文章推荐
- 对iOS网络请求的简单封装,并且使用block回调函数方式
- iOS简单封装网络请求,使用block回掉函数方式
- 使用AFNetWorking和ReactiveCocoa对网络请求进行封装(仿煎蛋iOS)(3)
- ios中使用block回调或代理方式请求网络接口数据(包括网络缓存)
- iOS---对AFNetworking进行二次封装,使用单例单独处理网络请求数据
- IOS:MKNetworkKit的网络请求(使用封装好的类)
- iOS 自己封装的网络请求,json解析的类
- 【封装】使用okHttp发送网络请求及上传下载进度监听
- iOS 网络与多线程--3.异步Get方式的网络请求(非阻塞)
- IOS网络请求封装与下拉刷新上托加载更多
- AFNetworking框架IOS网络数据请求由浅入深的使用方法
- iOS 开发 设置网络请求允许使用http
- 使用android-async-http来封装Android网络请求框架
- Android开发笔记-使用Volley开源库进行Http网络请求(POST方式)
- 使用AFNetworking3.0封装网络请求
- iOS 对基于AFNetworking框架网络请求的简单封装
- IOS网络请求之NSURLSession使用详解
- ReactNative 项目实战 (2) ListView 使用 网络请求以及下拉刷新 (条目控件封装)
- iOS 自己封装的网络请求,json解析的类
- IOS AFN请求封装使用