zoukankan      html  css  js  c++  java
  • 关于MKNetworking自己维护

    关于MKNetworking自己维护

     

    个人比较偏向MKNetworking, 因为在小项目里这个网络请求框架可以说是很轻量级。但是里边有一部分功能缺失或者是功能富余, 以及需要优化的地方。 所以决定自己来维护一个MK的repo以便自己使用。

    GITHUB : MKNetworking-DLProtecting这里大家可以看到源码以及DEMO工程。

    0.INIT

    • 创建Engin

      NSDictionary * customHeader = @{
                                        @"version" : @"0.0.1",
                                        @"channel" : @"appleStore"
                                        };
        MKNetworkEngine * engin = [[MKNetworkEngine alloc] initWithHostName:@"api.devdylan.com" apiPath:@"MKNetFrame" customHeaderFields:customHeader];
      
        // 使用缓存
        [engin useCache];
    • 创建Operation并添加回调
    • 执行

    1.GET

        //       -     GET /DOWNLOAD   -      //
    
        // 使用operationWithPath: 创建operation, 会自动拼接engin的HOST与apiPath等
        MKNetworkOperation * operation = [engin operationWithPath:@"Student.json" params:nil httpMethod:@"GET" ssl:NO];
    
        // 使用operationWithURLString: 创建operation, 不会拼接engin的HOST与apiPath
        MKNetworkOperation * operation_url = [engin operationWithURLString:@"http://api.devdylan.com/MKNetFrame/Student.json" params:nil httpMethod:@"GET"];
    
        NSLog(@"%@", operation.url);
        NSLog(@"%@", operation_url.url);
    
        [operation addCompletionHandler:^(MKNetworkOperation *completedOperation) {
    
            // 这里处理请求正确的时候
            NSLog(@"%@", completedOperation.responseJSON);
    
            if ([completedOperation isCachedResponse]) {
    
                // 你现在得到的是缓存中的数据
            } else {
    
                // 你现在得到的是服务器的数据
            }
    
        } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {
    
            // 这里返回服务器级的错误或者是JSON解析等错误.
            NSLog(@"%@", completedOperation.error);
        }];
    
        // 执行当前网络请求
        [engin enqueueOperation:operation];

    2.POST

        //       -     POST / UPLOAD    -      //
        MKNetworkOperation * operation_post = [engin operationWithPath:@"Student.json" params:nil httpMethod:@"POST" ssl:NO];
    
        [operation_post addCompletionHandler:^(MKNetworkOperation *completedOperation) {
    
            // 这里处理请求正确的时候
            NSLog(@"%@", completedOperation.responseJSON);
        } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {
    
            // 这里返回服务器级的错误或者是JSON解析等错误.
            NSLog(@"%@", completedOperation.error);
        }];
    
        [engin enqueueOperation:operation_post forceReload:YES]; // 设置不读缓存

    3.UPLOAD

        // 添加路径下文件
        [operation_post addFile:@"FILE PATH" forKey:@"image.png"];
        // 添加Data
        [operation_post addData:[NSData data] forKey:@"image2.png"];
    
        [operation_post onUploadProgressChanged:^(double progress) {
    
            // 上传进度
        }];

    4.DOWNLOAD

        // 下载文件时, 添加下载流
        [operation addDownloadStream:[NSOutputStream outputStreamToFileAtPath:@"downloadPath/image.png" append:YES]];
    
        [operation onDownloadProgressChanged:^(double progress) {
    
            // 下载进度
        }];

    5.FORCELOAD

     [engin enqueueOperation:operation_post forceReload:YES]; // 设置不读缓存

    6.FREEZABLE

    // 设置当前operation冻结
        [operation_post setFreezable:YES];
    
        // 解除冻结
        [operation_post setFreezable:NO];

    7.OTHERS

        [operation_post onNotModified:^{
    
            // 在服务器304时调用
        }];
    
        // 取消请求
        [operation_post cancelOperation];
    
        // 只在WIFI情况下请求, 默认为NO
        engin.wifiOnlyMode = YES;
        // 取消该引擎下所有的网络请求
        [engin cancelAllOperation];
        // 移除某一个网络请求
        [engin removeOperation:operation_post];
        // 清空缓存
        [engin emptyCache];
    
        [engin setReachabilityChangedHandler:^(NetworkStatus statu) {
    
            // 处理网络状态发生变化的回掉
        }];
    
        [operation_post setOperationStateChangedHandler:^(MKNetworkOperationState state) {
    
            // 当operation状态发生变化时回掉到这里
        }];

     

  • 相关阅读:
    生成随机串码并保存到Excel中
    制作100份word表
    抓取网页图片-以本地IIS网页为实践对象
    使用xlsxwriter 创建图表chart
    照片查看器2.0
    编程注意事项-记踩过的坑
    STC12C5A60S2的定时器模式16位的时候没有自动重载功能
    Keil C51 一个警告 '=': pointer: different mspace
    RT-Thread 使用笔记二
    Keil-C51读取ROM数据
  • 原文地址:https://www.cnblogs.com/W-Kr/p/5215111.html
Copyright © 2011-2022 走看看