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

方法声明部分

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值