iOS开发之普通网络异步请求与文件下载方法
先来说说普通异步下载方法,分为POST、GET两种
/** GET请求获取数据*/ + (void)getDataWithUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock { if (strUrl.length == 0) { return; } NSURL *url = [NSURL URLWithString:strUrl]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"GET"; [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { //解析并回调数据 NSDictionary *dicData = [self dictionaryForJsonData:data]; if (finishBlock) { finishBlock(dicData, error); } }]; [dataTask resume]; } /** POST请求获取数据*/ + (void)postParam:(NSDictionary *)dicParam toUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock { if (dicParam == nil || strUrl.length == 0) { return; } NSURL *url = [NSURL URLWithString:strUrl]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; request.HTTPBody = [self compactFormatDataForDictionary:dicParam]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { //解析并回调数据 NSDictionary *dicData = [self dictionaryForJsonData:data]; if (finishBlock) { finishBlock(dicData, error); } }]; [dataTask resume]; } /** 将字典转换成json格式字符串,不含\n这些符号*/ - (NSData *)compactFormatDataForDictionary:(NSDictionary *)dicJson { if (![dicJson isKindOfClass:[NSDictionary class]]) { return nil; } NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicJson options:0 error:nil]; if (![jsonData isKindOfClass:[NSData class]]) { return nil; } return jsonData; } /** 将二进制数据转换成字典*/ - (NSDictionary *)dictionaryForJsonData:(NSData *)jsonData { if (![jsonData isKindOfClass:[NSData class]] || jsonData.length < 1) { return nil; } id jsonObj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil]; if (![jsonObj isKindOfClass:[NSDictionary class]]) { return nil; } return [NSDictionary dictionaryWithDictionary:(NSDictionary *)jsonObj]; }
下面说说下载文件的方法
/** 下载文件方法*/ - (void)downLoadFileWithUrl:(NSString *)urlStr finishBlock:(GSNetLibTMIdAndDataAndErrorBlock)finishBlock { if (urlStr.length == 0) { return; } NSURL *url = [NSURL URLWithString:urlStr]; NSURLSession *session = [NSURLSession sharedSession]; //构造下载任务 NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { //下载成功回调,文件数据会被默认存储在一个临时目录 if (error == nil) { if (location != nil && [location path].length > 0) { NSString *tmpFilePath = [location path]; NSData *data = [NSData dataWithContentsOfFile:tmpFilePath]; //回调数据 if (finishBlock) { finishBlock(0, data, error); } //删除临时目录文件 NSFileManager *fileMgr = [NSFileManager defaultManager]; [fileMgr removeItemAtPath:tmpFilePath error:nil]; } } }]; //执行任务 [downloadTask resume]; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!