国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用AF3.0和YYCache寫的網絡請求類

2019-11-07 23:55:21
字體:
來源:轉載
供稿:網友

//

 NetworkManager.h

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger, NetworkStatus) {

    /** 未知網絡*/

    NetworkStatusUnknown,

    /** 無網絡*/

    NetworkStatusNotReachable,

    /** 手機網絡*/

    NetworkStatusReachableViaWWAN,

    /** WIFI網絡*/

    NetworkStatusReachableViaWiFi

};

/** 請求成功的Block */

typedef void(^RequestSuccess)(id responSEObject);

/** 請求失敗的Block */

typedef void(^RequestFailed)(NSError *error);

/** 緩存的Block */

typedef void(^RequestCache)(id responseCache);

/** 網絡狀態的Block*/

typedef void(^GetNetworkStatus)(NetworkStatus status);

/** 上傳或下載進度*/

typedef void(^HttpPRogress)(NSProgress *progress);

@interface NetworkManager :NSObject

/**

*  開始監聽網絡狀態

*/

+ (void)startGetNetworkStatus;

/**

 *  實時獲取網絡狀態回調

 */

+ (void)networkStatusWithBlock:(GetNetworkStatus)status;

/**

 不帶緩存的GET請求

 @param urlStr 請求路徑

 @param success 請求成功

 @param failure 請求失敗

 */

+(void)startRequestGetWithurl:(NSString *)urlStr whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure;

/**

 不帶緩存的POST請求

 @param urlStr 請求路徑

 @param params 請求參數

 @param success 請求成功

 @param failure 請求失敗

 */

+(void)startRequestWithurl:(NSString *)urlStr andParams:(NSDictionary *)params whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure;

/**

 帶緩存的GET請求

 @param urlStr 請求路徑

 @param requestCache 原來的緩存

 @param success 請求成功

 @param failure 請求失敗

 */

+(void)startRequestGetWithurl:(NSString *)urlStr andRequestCache:(RequestCache)requestCache whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure;

/**

 帶緩存的POST請求

 @param urlStr 請求路徑

 @param requestCache 原來的緩存

 @param params 請求參數

 @param success 請求成功

 @param failure 請求失敗

 */

+(void)startRequestWithurl:(NSString *)urlStr andRequestCache:(RequestCache)requestCache andParams:(NSDictionary *)params whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure;

/**

 上傳單張圖片

 @param urlStr 上傳路徑

 @param parm 上傳參數

 @param image 上傳的圖片

 @param success 上傳成功

 @param failure 上傳失敗

 */

+(void)uploadImageWithUrl:(NSString *)urlStr  andParm:(NSDictionary *)parm andImage:(UIImage *)image andWhenSuccess:(RequestSuccess)success andWhenFailure:(RequestFailed)failure;

/**

 上傳多張圖片

 @param urlStr 上傳路徑

 @param parm 上傳參數

 @param imageArr 上傳的圖片

 @param progress 上傳的進度

 @param success 上傳成功

 @param failure 上傳失敗

 */

+(void)uploadImageArrayWithUrl:(NSString *)urlStr  andParm:(NSDictionary *)parm andImage:(NSArray <UIImage *> *)imageArr andProgress:(HttpProgress)progress andWhenSuccess:(RequestSuccess)success andWhenFailure:(RequestFailed)failure;

/**

 下載文件

 @param URL 下載路徑

 @param fileDir 保存路徑

 @param progress 下載進度

 @param success 下載成功

 @param failure 下載失敗

 @return 下載任務

 */

+ (NSURLsessionTask *)downloadWithURL:(NSString *)URL fileDir:(NSString *)fileDir progress:(HttpProgress)progress success:(void(^)(NSString *))success failure:(RequestFailed)failure;

/**

 獲取緩存大小

 @return 緩存大小的字符串

 */

+(NSString *)getCacheSize;

/**

 移除所有緩存

 */

+(void)removeAllCache;

@end

/

NetworkManager.m

#import "NetworkManager.h"

#import "AFNetworking.h"

#import <YYCache.h>

#import "SDImageCache.h"

@implementation NetworkManager

static AFHTTPSessionManager *_sessionManager =nil;

static GetNetworkStatus _networkStatus;

static NSString *const _NetworkResponseCache =@"NetworkRequestCache";

static YYCache *_dataCache;

/**

 開始監聽網絡狀態

 */

+(void)startGetNetworkStatus{

    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

    

    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        switch (status)

        {

            case AFNetworkReachabilityStatusUnknown:

                _networkStatus(NetworkStatusUnknown);

                break;

            case AFNetworkReachabilityStatusNotReachable:

                _networkStatus(NetworkStatusNotReachable);

                break;

                //手機自帶網絡

            case AFNetworkReachabilityStatusReachableViaWWAN:

                _networkStatus(NetworkStatusReachableViaWWAN);

                break;

                //Wifi

            case AFNetworkReachabilityStatusReachableViaWiFi:

                _networkStatus(NetworkStatusReachableViaWiFi);

                break;

        }

    }];

    [manager startMonitoring];

}

/**

 獲取網絡狀態

 @param status 獲取網絡狀態的Block

 */

+(void)networkStatusWithBlock:(GetNetworkStatus)status{

    _networkStatus = status;

}

//****************************不帶緩存的GET和POST請求

//使用GET方法獲取數據

+(void)startRequestGetWithurl:(NSString *)urlStr whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure{

    AFHTTPSessionManager *manager = [self createAFHTTPSessionManager];

    [manager GET:urlStr parameters:nil progress:^(NSProgress *_Nonnull downloadProgress) {

    }

         success:^(NSURLSessionDataTask * _Nonnull task,id  _Nullable responseObject) {

             if (success) {

                 success(responseObject);

             }

         }

         failure:^(NSURLSessionDataTask * _Nullable task, NSError *_Nonnull   error) {

             if (failure) {

                 failure(error);

             }

         }];

}

//使用POST方法獲取數據

+(void)startRequestWithurl:(NSString *)urlStr andParams:(NSDictionary *)params whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure{

    AFHTTPSessionManager *manager = [self createAFHTTPSessionManager];

    [manager POST:urlStr parameters:params progress:^(NSProgress *_Nonnull uploadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task,id  _Nullable responseObject) {

        if (success) {

            success(responseObject);

        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError *_Nonnull error) {

        if (failure) {

            failure(error);

        }

    }];

    

}

//**************************帶緩存GET和POST請求

//使用GET方法獲取數據

+(void)startRequestGetWithurl:(NSString *)urlStr andRequestCache:(RequestCache)requestCache whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure{

    AFHTTPSessionManager *manager = [self createAFHTTPSessionManager];

    if (requestCache) {

        requestCache([self getResponseCacheForKey:urlStr]);

    }

  

    [manager GET:urlStr parameters:nil progress:^(NSProgress *_Nonnull downloadProgress) {

    }

         success:^(NSURLSessionDataTask * _Nonnull task,id  _Nullable responseObject) {

             if (success) {

                 success(responseObject);

             }

             [self saveResponseCache:responseObject forKey:urlStr];

         }

         failure:^(NSURLSessionDataTask * _Nullable task, NSError *_Nonnull   error) {

             if (failure) {

                 failure(error);

             }

         }];

}

//使用POST方法獲取數據

+(void)startRequestWithurl:(NSString *)urlStr andRequestCache:(RequestCache)requestCache andParams:(NSDictionary *)params whenSuccess:(RequestSuccess)success andFailure:(RequestFailed)failure{

    AFHTTPSessionManager *manager = [self createAFHTTPSessionManager];

    if (requestCache) {

        requestCache([self getResponseCacheForKey:urlStr]);

    }

    [manager POST:urlStr parameters:params progress:^(NSProgress *_Nonnull uploadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task,id  _Nullable responseObject) {

        if (success) {

            success(responseObject);

        }

        [self saveResponseCache:responseObject forKey:urlStr];

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError *_Nonnull error) {

        if (failure) {

            failure(error);

        }

    }];

    

}

//上傳單張圖片

+(void)uploadImageWithUrl:(NSString *)urlStr  andParm:(NSDictionary *)parm andImage:(UIImage *)image andWhenSuccess:(RequestSuccess)success andWhenFailure:(RequestFailed)failure{

    

    

    NSData *imageData =UIImagePNGRepresentation(image);

    

    AFHTTPSessionManager *manager = [selfcreateAFHTTPSessionManager];

    

    // 給圖片重命名

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    formatter.dateFormat =@"yyyyMMddHHmmss";

    NSString *str = [formatterstringFromDate:[NSDatedate]];

    NSString *fileName = [NSStringstringWithFormat:@"%@.png", str];

    [manager POST:urlStrparameters:parm constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {

        // 上傳文件

        [formData appendPartWithFileData:imageDataname:@"file"fileName:fileName mimeType:@"image/png"];

        

    } progress:^(NSProgress *_Nonnull uploadProgress) {

        

    } success:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {

        NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:responseObjectoptions:NSJSONReadingMutableContainerserror:nil];

        if (success) {

            success(dic);

        }

    } failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {

        if (failure) {

            failure(error);

        }

    }];

}

//上傳多張圖片

+(void)uploadImageArrayWithUrl:(NSString *)urlStr  andParm:(NSDictionary *)parm andImage:(NSArray <UIImage *> *)imageArr andProgress:(HttpProgress)progress andWhenSuccess:(RequestSuccess)success andWhenFailure:(RequestFailed)failure{

    

    AFHTTPSessionManager *manager = [selfcreateAFHTTPSessionManager];

    

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    formatter.dateFormat =@"yyyyMMddHHmmss";

    NSString *str = [formatterstringFromDate:[NSDatedate]];

    NSString *fileName = [NSStringstringWithFormat:@"%@.png", str];

    

    [manager POST:urlStrparameters:parm constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {

        //壓縮-添加-上傳圖片

        [imageArr enumerateObjectsUsingBlock:^(UIImage *_Nonnull image, NSUInteger idx,BOOL * _Nonnull stop) {

            NSData *imageData =UIImageJPEGRepresentation(image, 0.5);

            [formData appendPartWithFileData:imageDataname:@"file"fileName:[NSStringstringWithFormat:@"%@%ld.png",fileName,idx]mimeType:@"image/png"];

        }];

    } progress:^(NSProgress *_Nonnull uploadProgress) {

        //上傳進度

        if (progress) {

            progress(uploadProgress);

        }

    } success:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {

        if (success) {

            success(responseObject);

        }

        

    } failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {

        [UIapplicationsharedApplication].networkActivityIndicatorVisible =NO;

        if (failure) {

            failure(error);

        }

    }];

}

//下載文件

+ (NSURLSessionTask *)downloadWithURL:(NSString *)URL fileDir:(NSString *)fileDir progress:(HttpProgress)progress success:(void(^)(NSString *))success failure:(RequestFailed)failure

{

    [UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;

    

    AFHTTPSessionManager *manager = [selfcreateAFHTTPSessionManager];

    NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:URL]];

    NSURLSessionDownloadTask *downloadTask = [managerdownloadTaskWithRequest:request progress:^(NSProgress *_Nonnull downloadProgress) {

        //下載進度

        if (progress) {

            progress(downloadProgress);

           // NSLog(@"下載進度:%.2f%%",100.0*downloadProgress.completedUnitCount/downloadProgress.totalUnitCount);

        }

        

    } destination:^NSURL *_Nonnull(NSURL *_Nonnull targetPath, NSURLResponse *_Nonnull response) {

        

        //拼接緩存目錄

        NSString *downloadDir = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:fileDir ? fileDir :@"Download"];

        //打開文件管理器

        NSFileManager *fileManager = [NSFileManagerdefaultManager];

        

        //創建Download目錄

        [fileManager createDirectoryAtPath:downloadDirwithIntermediateDirectories:YESattributes:nilerror:nil];

        

        //拼接文件路徑

        NSString *filePath = [downloadDirstringByAppendingPathComponent:response.suggestedFilename];

        

        //返回文件位置的URL路徑

        return [NSURLfileURLWithPath:filePath];

        

    } completionHandler:^(NSURLResponse *_Nonnull response, NSURL *_Nullable filePath, NSError *_Nullable error) {

        //下載成功返回下載路徑

        success ? success(filePath.absoluteString) :nil;

        failure && error ? failure(error) : nil;

        

    }];

    

    //開始下載

    [downloadTask resume];

    

    return downloadTask;

    

}

//緩存操作在程序運行過程中,它會在你程序中每個類調用一次initialize初始化 _dataCache

+ (void)initialize

{

    _dataCache = [YYCachecacheWithName:_NetworkResponseCache];

    [_dataCache.memoryCachesetCountLimit:50];//內存最大緩存數據個數

    [_dataCache.memoryCachesetCostLimit:1*1024];//內存最大緩存開銷目前這個毫無用處

    [_dataCache.diskCachesetCostLimit:10*1024];//磁盤最大緩存開銷

    [_dataCache.diskCachesetCountLimit:50];//磁盤最大緩存數據個數

    [_dataCache.diskCachesetAutoTrimInterval:60];//設置磁盤lru動態清理頻率默認 60秒

}

+ (void)saveResponseCache:(id)responseCache forKey:(NSString *)key

{

    //異步緩存,不會阻塞主線程

    [_dataCachesetObject:responseCache forKey:keywithBlock:nil];

    

}

+ (id)getResponseCacheForKey:(NSString *)key

{

    //NSLog(@"磁盤緩存位置%@",_dataCache.diskCache.path);

    return [_dataCacheobjectForKey:key];

}

+(NSString *)getCacheSize{

    NSUInteger imageCacheSize = [[SDImageCachesharedImageCache] getSize];

    NSInteger totalSize =_dataCache.memoryCache.totalCost +_dataCache.diskCache.totalCost + imageCacheSize;

    NSString *totalSizeStr;

    if (totalSize < 1024) {

        totalSizeStr = [NSStringstringWithFormat:@"%ldB",totalSize];

    }elseif (totalSize>=1024&&totalSize<1024*1024){

         totalSizeStr = [NSStringstringWithFormat:@"%.2fKB",totalSize/1024.0];

    }elseif(totalSize > 1024*1024) {

         totalSizeStr = [NSStringstringWithFormat:@"%.2fMB",totalSize/(1024.0*1024)];

    }

    return totalSizeStr;

}

+(void)removeAllCache{

    [[SDImageCachesharedImageCache] clearDisk];

    [_dataCache.diskCacheremoveAllObjects];

    [_dataCache.memoryCacheremoveAllObjects];

}

#pragma mark - 設置AFHTTPSessionManager相關屬性

+ (AFHTTPSessionManager *)createAFHTTPSessionManager

{

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //設置請求參數的類型:HTTP (AFJSONRequestSerializer,AFHTTPRequestSerializer)

    manager.requestSerializer = [AFHTTPRequestSerializer serializer];

    //設置請求的超時時間

    manager.requestSerializer.timeoutInterval = 30.f;

    //設置服務器返回結果的類型:JSON (AFJSONResponseSerializer,AFHTTPResponseSerializer)

    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/javascript",@"text/html",@"text/plain",nil];

    

    return manager;

}

@end


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开封县| 钟山县| 姚安县| 阜康市| 宁乡县| 永川市| 龙门县| 祁连县| 瑞金市| 仙居县| 杭锦后旗| 庆阳市| 喀什市| 涞水县| 东海县| 宝山区| 丰台区| 临清市| 翼城县| 保靖县| 比如县| 阿尔山市| 莆田市| 成安县| 华容县| 马公市| 梅河口市| 宝兴县| 阿克陶县| 东海县| 连山| 定陶县| 上饶县| 上栗县| 丹巴县| 阿城市| 浮山县| 二连浩特市| 林甸县| 铜川市| 渭源县|