Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用AFN网络下载速度非常慢_Ios_Objective C_Afnetworking 3 - Fatal编程技术网

Ios 使用AFN网络下载速度非常慢

Ios 使用AFN网络下载速度非常慢,ios,objective-c,afnetworking-3,Ios,Objective C,Afnetworking 3,下面的代码用于下载由压缩JSON或压缩jpg图像组成的数据“包”。问题是图像压缩文件下载。所讨论的文件是5MB,在64GB的iPhone7上下载大约需要10分钟,在相当慷慨的iMac上运行的模拟器上下载大约需要5分钟 接收到的数据会被存储,但在下载所有文件之前不会被处理,因此在下载完成之前,其他地方不会发生任何事情 这似乎太过分了,因为我可以使用web浏览器在可忽略不计的时间内下载文件。我看了各种各样的问题和答案,没有发现任何有用的东西 任何帮助都将不胜感激 -(NSInteger)getPac

下面的代码用于下载由压缩JSON或压缩jpg图像组成的数据“包”。问题是图像压缩文件下载。所讨论的文件是5MB,在64GB的iPhone7上下载大约需要10分钟,在相当慷慨的iMac上运行的模拟器上下载大约需要5分钟

接收到的数据会被存储,但在下载所有文件之前不会被处理,因此在下载完成之前,其他地方不会发生任何事情

这似乎太过分了,因为我可以使用web浏览器在可忽略不计的时间内下载文件。我看了各种各样的问题和答案,没有发现任何有用的东西

任何帮助都将不胜感激

-(NSInteger)getPackageData:(NSString *)url type:(NSInteger)isZip fileName:(NSString *)fileName
item:(NSString *)item

{

__block NSInteger errorCode=0;
isReady=0;

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration    defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

if(isZip==0){
    manager.responseSerializer=[AFJSONResponseSerializer serializer];
}else{
    manager.responseSerializer=[AFHTTPResponseSerializer serializer];
}


AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
[policy setValidatesDomainName:YES];
manager.securityPolicy = policy;

/****************

 for self signed certs
 manager.securityPolicy.allowInvalidCertificates = YES;
 manager.securityPolicy.validatesDomainName = NO;

 ***************/

NSURL *mURL = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:mURL];

[request setCachePolicy: NSURLRequestReloadIgnoringLocalCacheData];
[request setTimeoutInterval:100];

NSURLSessionDataTask *dataTask =
[manager dataTaskWithRequest:request
           completionHandler:^(NSURLResponse *response,
                               id json,
                               NSError *error) {

               if (error) {

                   if ([response isKindOfClass:[NSHTTPURLResponse class]]) {

                       //error condition 1

                       NSInteger statusCode = [(NSHTTPURLResponse *) response statusCode];

                       if(statusCode==403){   // unauthorized
                           errorCode=-1;
                       }
                   }

               }

               else if(isZip==1){
                   // process Zipped json Files for data update

                   NSString *filePath = [jsonPath stringByAppendingPathComponent:fileName];

                   [json writeToFile:filePath options:NSDataWritingAtomic error:&error];
                   [[NSNotificationCenter defaultCenter] postNotificationName:@"dataReady" object:item];
                   errorCode=0;

               }else if(isZip==2){  //zipped photos file

                   NSString *filePath = [photoPath stringByAppendingPathComponent:fileName];
                   CS_LOG(@"Saving URL %@ to photo file %@",url,filePath);
                   [json writeToFile:filePath options:NSDataWritingAtomic error:&error];
                   CLS_LOG(@"Saved");

                   [[NSNotificationCenter defaultCenter] postNotificationName:@"dataReady" object:@"PHOTOSREADY"];
                   errorCode=0;
               }


           } ];

[dataTask resume];
return errorCode;

}

一般来说,
NSURLSessionDataTask
用于在内存中处理少量数据,而
NSURLSessionDownloadTask
用于下载大量数据(如zip文件)并将其存储在磁盘上


也许你应该用
NSURLSessionDownloadTask
来处理你的大拉链,用
NSURLSessionDataTask
来处理你的JSON数据。

可能帮不了你,但我要做的第一件事是用“基本”下载任务代码替换你的函数。看看它的速度有多快。如果速度更快,开始重新添加上面的其他功能,直到你遇到了让事情变慢的东西。@DonMag谢谢-我将重写这篇文章,看看会发生什么。顺便说一下,我很难想出一个更简单的实现。嗯。。。你可能有一个合理的理由,但是。。。通常,NSURLSessionDataTask用于处理少量数据,然后在内存中进行操作,而NSURLSessionDownloadTask用于下载大量数据(如zip文件)并将其存储在磁盘上。也许你应该用DownloadTask来处理你的大拉链,用DataTask来处理你的JSON数据。@DonMag我没有逻辑上的理由!;-)。我可以改变,谢谢@DonMag帮了大忙。如果你能把它变成一个答案,我会接受的。