iOS基础--网络请求的简单封装

作者: 李xiao屁的忧伤 | 来源:发表于2015-12-24 12:55 被阅读1972次
    #import <Foundation/Foundation.h>
    
    @protocol NetWorkingHelperDelegate <NSObject>
    
    // 参数为所需要传出去的值(解析好的数据)
    - (void)passValueWithData : (id)value ;
    
    @end
    
    @interface NetWorkingHelper : NSObject
    
    @property (nonatomic,assign)id<NetWorkingHelperDelegate>delegate ;
    
    // 同步get
    - (void)getAndSynchronousMethodWithURL : (NSString *)urlString ;
    // 同步post
    - (void)postAndSynchronousMethodWithURL : (NSString *)urlString parameterString : (NSString *)parameterString ;
    // 异步get block实现
    - (void)getAndAsynchronousMethodWithURL : (NSString *)urlString ;
    // 异步post  block实现
    - (void)postAndAsynchronousMethodWithURL :(NSString *)urlString parameterString : (NSString *)parameterString ;
    
    @end
    
    #import "NetWorkingHelper.h"
    
    @implementation NetWorkingHelper
    
    // 解析
    - (void)jsonParserWithData :(NSData *)data
    {
        id receiveResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil] ;
        // 通过代理将解析好的数据传递出去
        [self.delegate passValueWithData:receiveResult] ;
    }
    
    // 同步连接的get请求
    - (void)getAndSynchronousMethodWithURL : (NSString *)urlString
    {
        // 定义一个URL网址
        NSURL *url = [NSURL URLWithString:urlString] ;
        // 初始化请求方式,默认为get方式
        NSURLRequest *request = [NSURLRequest requestWithURL:url] ;
        // 创建同步链接
        // request : 请求对象,里边承载着我们的请求信息,有网址,请求头等信息
        // response : 请求的返回(响应),里面包含了响应头的一些信息,如果需要用到响应头,需要传递此参数,一般不需要.
        // error:请求出错的时候,会有错误信息保存在该参数中,一般置为nil就可以,咱们可以根据返回数据来判断是否请求有问题.
        NSError *error ;
        NSData *receiveData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error] ;
        [self jsonParserWithData:receiveData] ;
    }
    
    // 同步连接的post请求
    - (void)postAndSynchronousMethodWithURL : (NSString *)urlString parameterString : (NSString *)parameterString
    {
        //date=20151031&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213
        NSURL *url = [NSURL URLWithString:urlString] ;
        // 将string类型转换为NSDate类型.
        NSData *postParameter = [parameterString dataUsingEncoding:NSUTF8StringEncoding] ;
        // 创建请求,因为NSURLRequest类型不能设置请求方式,所以如果是post请求,就得使用它的子类NSMutableURLRequest
        NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:url] ;
        // 设置请求方式
        mutableRequest.HTTPMethod = @"POST" ;
        // 设置请求参数
        mutableRequest.HTTPBody = postParameter ;
        // 创建同步连接
        NSError *error ;
        NSData *receiveData = [NSURLConnection sendSynchronousRequest:mutableRequest returningResponse:nil error:&error] ;
        [self jsonParserWithData:receiveData] ;
    }
    
    // 异步连接的get请求 block实现
    - (void)getAndAsynchronousMethodWithURL : (NSString *)urlString
    {
        NSURL *url = [NSURL URLWithString:urlString] ;
        NSURLRequest *request = [NSURLRequest requestWithURL:url] ;
        // 异步连接 block实现
        // queue :需要将请求连接放到一个队列中,目前我们是将该请求放到主队列中,在主队列中,操作所占有资源的优先等级更高,说白了就是请求会更快.
        // handle : 请求有返回结果的时候,会执行该block回调.
        /*
         block中参数解释:
         NSURLResponse _Nullable response:请求返回的响应,内部包含响应头
         NSData * _Nullable data : 使我们所需要的实际数据,也就是我们所需要的解析数据
         NSError * _Nullable connectionError : 请求出错的时候返回的错误信息.
         */
        
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError)
         {
             [self jsonParserWithData:data] ;
         }];
    }
    
    // 异步连接的post请求 block实现
    - (void)postAndAsynchronousMethodWithURL :(NSString *)urlString parameterString : (NSString *)parameterString
    {
        
        NSURL *url = [NSURL URLWithString:urlString] ;
        NSData *postParameter = [parameterString dataUsingEncoding:NSUTF8StringEncoding] ;
        NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:url] ;
        mutableRequest.HTTPBody = postParameter ;
        mutableRequest.HTTPMethod = @"POST" ;
        [NSURLConnection sendAsynchronousRequest:mutableRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError)
         {
             [self jsonParserWithData:data] ;
         }] ;
    }
    @end
    
    

    相关文章

      网友评论

      本文标题:iOS基础--网络请求的简单封装

      本文链接:https://www.haomeiwen.com/subject/qapvhttx.html