Ios 为什么completionHandler回调被称为delay,那么AFNetworking中的进度(它是1.0)将上载多个映像

Ios 为什么completionHandler回调被称为delay,那么AFNetworking中的进度(它是1.0)将上载多个映像,ios,objective-c,iphone,afnetworking-3,Ios,Objective C,Iphone,Afnetworking 3,我正在使用AFNetworking3.0在iOS中上载一些图像,代码如下所示,这些图像是UIImage的数组。 我有两个问题: 当uploadProgress.fractionCompleted等于1.0时,在进度块中我打印日志A,在completionHandler块的头部我打印日志B,然后我发现日志A和B的时间相差很大。有什么不对劲的还是正常的 当我上传多个图像时,为了更好的性能和更少的上传时间,我应该创建多个请求,还是像下面这样,哪一个是正确的选择 代码如下所示: NSMutableURL

我正在使用AFNetworking3.0在iOS中上载一些图像,代码如下所示,这些图像是UIImage的数组。 我有两个问题:

  • uploadProgress.fractionCompleted
    等于1.0时,在进度块中我打印日志A,在
    completionHandler
    块的头部我打印日志B,然后我发现日志A和B的时间相差很大。有什么不对劲的还是正常的

  • 当我上传多个图像时,为了更好的性能和更少的上传时间,我应该创建多个请求,还是像下面这样,哪一个是正确的选择

  • 代码如下所示:

    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:URL_IMAGE_SERVER parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {           
      for(UIImage *eachImage in images) {
        NSData *imageData = UIImageJPEGRepresentation(eachImage, 0.5);
        [formData appendPartWithFileData:imageData name:@"upload_picture" fileName:@"filename.jpg" mimeType:@"image/jpeg"];
      }
    } error:nil];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    NSURLSessionUploadTask *uploadTask;
    uploadTask = [manager
      uploadTaskWithStreamedRequest:request
      progress:^(NSProgress * _Nonnull uploadProgress) {
         // This is not called back on the main queue.
         // You are responsible for dispatching to the main queue for UI updates
          dispatch_async(dispatch_get_main_queue(), ^{
       });
     }
      completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
         if (error) {
         } else {
         }
      }];
    [uploadTask resume];
    
    NSMutableURLRequest*request=[[AFHTTPRequestSerializer]multipartFormRequestWithMethod:@“POST”URLString:URL\u IMAGE\u服务器参数:nil constructingBodyWithBlock:^(id formData){
    用于(UIImage*图像中的每个图像){
    NSData*imageData=UIIMAGEJPEG表示法(每个图像,0.5);
    [formData appendPartWithFileData:imageData名称:@“上传图片”文件名:@“fileName.jpg”mimeType:@“image/jpeg”];
    }
    }错误:无];
    AFURLSessionManager*manager=[[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    manager.responseSerializer=[AFHTTPResponseSerializer序列化程序];
    NSURLSessionUploadTask*上传任务;
    uploadTask=[manager]
    uploadTaskWithStreamedRequest:请求
    进度:^(NSProgress*_非空上传进度){
    //这不会在主队列上回调。
    //您负责将UI更新发送到主队列
    dispatch\u async(dispatch\u get\u main\u queue()^{
    });
    }
    completionHandler:^(NSURLResponse*\u非空响应,id\u可空响应对象,NSError*\u可空错误){
    如果(错误){
    }否则{
    }
    }];
    [上传任务恢复];
    
    我试图将rcode的格式设置得更好一些,但有些括号没有对齐。代码示例需要在开头缩进四个空格,这里不应该使用制表符。此外,对于数字列表,在后面有一个空格。因此它在降价中正确呈现(即1.第一个而不是1.第一个)@AlBlue谢谢你的提醒。嗨。。你能解决这个问题吗?@AhmedZ。是的,我解决了。第一个问题的原因是,当服务器处理我的文件时,它需要时间。第二,我发现更好的选择是一次上传多个文件,花费的时间更少。我曾尝试将rcode的格式设置得更好一些,但有些括号没有对齐。代码示例需要在开头缩进四个空格,这里不应该使用制表符。此外,对于数字列表,在后面有一个空格。因此它在降价中正确呈现(即1.第一个而不是1.第一个)@AlBlue谢谢你的提醒。嗨。。你能解决这个问题吗?@AhmedZ。是的,我解决了。第一个问题的原因是,当服务器处理我的文件时,它需要时间。其次,我发现更好的选择是一次上传多个文件,花费的时间更少。