同步异步网络请求封装以及数据JSON解析

来源:互联网 发布:傲娇熊直播 知乎 编辑:程序博客网 时间:2024/05/17 17:57

方法声明部分

#import <Foundation/Foundation.h>/* 协议 */@protocol NetworkHandleDelegate <NSObject>- (void)didFinishLoading:(id)result;@end@interface NetworkHandle : NSObject#pragma mark - 封装: 通过delegate向外传值@property (nonatomic, assign) id <NetworkHandleDelegate> delegate;- (void)asynGETWithURL:(NSString *)urlString;+ (void)sendAsynGETWithURL:(NSString *)urlString delegate:(id<NetworkHandleDelegate>)delegate;#pragma mark - 封装:通过block向外传值+ (void)asynGETJSONWithURL:(NSString *)urlString completion:(void(^)(id))block;+ (void)asynPOSTJSONWithURL:(NSString *)urlString httpBody:(NSString *)bodyString completion:(void(^)(id result))block;@end

实现部分

#import "NetworkHandle.h"@interface NetworkHandle ()@end@implementation NetworkHandle/* 将网络请求进行封装 */+ (void)asynGETJSONWithURL:(NSString *)urlString completion:(void(^)(id result))block {    /* 1.转码 */    NSString *enCodingStr = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    /* 2.创建URL对象 */    NSURL *url = [NSURL URLWithString:enCodingStr];    /* 3.创建请求 */    NSURLRequest *request = [NSURLRequest requestWithURL:url];    /* 4.创建链接接受数据 */    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        /* 5.数据解析 */        NSError *error = nil;        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];        /* 6.通过block将result值返回出去 */        block(result);    }];}#pragma mark - Block传值+ (void)asynPOSTJSONWithURL:(NSString *)urlString httpBody:(NSString *)bodyString completion:(void(^)(id result))block {    /* 1.创建URL */    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];    /* 2.创建请求 */    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    request.HTTPMethod = @"POST";    request.HTTPBody = [bodyString dataUsingEncoding:NSUTF8StringEncoding];    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];        block(result);    }];}- (void)asynGETWithURL:(NSString *)urlString {    NSString *enCodingStr = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSURL *url = [NSURL URLWithString:enCodingStr];    NSURLRequest *request = [NSURLRequest requestWithURL:url];    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        id result = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];        /* 通过协议方法将 result传递到外部 */        [self.delegate didFinishLoading:result];    }];}+ (void)sendAsynGETWithURL:(NSString *)urlString delegate:(id<NetworkHandleDelegate>)delegate {    NSString *enCodingStr = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSURL *url = [NSURL URLWithString:enCodingStr];    NSURLRequest *request = [NSURLRequest requestWithURL:url];    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        id result = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];        /* 通过协议方法将 result传递到外部 */        [delegate didFinishLoading:result];    }];}@end
0 0
原创粉丝点击