关于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状态发生变化时回掉到这里
    }];

 

posted @ 2016-02-24 20:40  w_only  阅读(258)  评论(0编辑  收藏  举报