个人比较偏向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];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状态发生变化时回掉到这里
    }]; 
原文:http://www.cnblogs.com/W-Kr/p/5215111.html