zoukankan      html  css  js  c++  java
  • IOS 使用block完成网络请求的自定义类BlockURLConnection

    一,头文件

    #import <Foundation/Foundation.h>
    //定义下载中block类型
    typedef void(^ProcessBlock) (NSURLResponse *response,NSData *data,NSError *error);
    //定义下载完成block类型
    typedef void(^CompletionBlock) (NSURLResponse *response,NSData *data,NSError *error);


    @interface BlockURLConnection : NSURLConnection<NSURLConnectionDataDelegate>
    +(BlockURLConnection *)sendAsynchronousRequest:(NSURLRequest *)request ProcessBlock:(ProcessBlock)process CompletionBlock:(CompletionBlock)completion;


    @end

    二,实现部分
    #import "BlockURLConnection.h"
    @interface BlockURLConnection()
    @property (nonatomic,strong ) NSError *error;
    @property (nonatomic,strong ) NSMutableData *data;
    @property (nonatomic,strong ) NSURLResponse *response;
    @property (nonatomic,strong ) ProcessBlock process;
    @property (nonatomic,strong ) CompletionBlock completion;

    @end

    @implementation BlockURLConnection

    +(BlockURLConnection *)sendAsynchronousRequest:(NSURLRequest *)request ProcessBlock:(ProcessBlock)process CompletionBlock:(CompletionBlock)completion
    {
        BlockURLConnection *connection=[[BlockURLConnection alloc]initWithRequest:request delegate:self];
        connection.process=process;
        connection.completion=completion;
        return connection;
    }

    -(id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate
    {
        //指定网络链接的代理是自己
        if (self=[super initWithRequest:request delegate:self]) {
            ;
        }
        return self;
    }

    //收到链接错误信息
    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    {
        self.error=error;
    }

    //收到网络响应信息
    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        self.response=response;
        self.data=[NSMutableData data];
    }

    //收到网络消息
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        [self.data appendData:data];
        self.process(self.response,data,self.error);
    }

    //完成接受网络消息
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        self.completion(self.response,self.data,self.error);
    }


    @end

  • 相关阅读:
    关于分布式事务、两阶段提交协议、三阶提交协议
    关于分布式一致性的探究
    初始分布式系统
    移动端禁止video在ios系统中自动全屏播放
    ios对new Date() 的兼容问题
    VUE路由懒加载的方式
    记录 好看的阴影
    创建码云仓库,并将本地代码上传至仓库
    v-cloak遇到的问题及解决方法
    CSS 定义一条渐变优雅的分割线
  • 原文地址:https://www.cnblogs.com/huntaiji/p/3475722.html
Copyright © 2011-2022 走看看