Ios 为什么completionHandler回调被称为delay,那么AFNetworking中的进度(它是1.0)将上载多个映像
我正在使用AFNetworking3.0在iOS中上载一些图像,代码如下所示,这些图像是UIImage的数组。 我有两个问题: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
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。是的,我解决了。第一个问题的原因是,当服务器处理我的文件时,它需要时间。其次,我发现更好的选择是一次上传多个文件,花费的时间更少。