多张照片背景图片上传和内存

问题描述:

我试图用AFNetworking在后台模式下上传多张照片,并且设法让它工作。
我现在面临的主要问题是内存,它在上传超过10张照片的时候用完了我的应用程序。
我在做什么只是同时发射所有的上传,因为我已经阅读了StackOverflow的一些答案。
现在,这个问题出现了,我想知道如果我做了内存管理的错误,或者如果更好的策略是序列化上传,启动第一个,当它终止时,开始上传下一个handleEventsForBackgroundURLSession方法。
在完全更改上传设计之前,我希望从某人那里听到它是否是一个好的选择,因为我在这个问题上看到的大多数答案都声明应该将所有请求放在一起。多张照片背景图片上传和内存

谢谢

创建NSOperationQueue并添加所有上传图像操作到该队列。该队列将管理您的系统内存。请参阅下面的示例代码。

 NSOperationQueue *myQueue = [[NSOperationQueue alloc]init]; 
    NSURLRequest *request = [[AFHTTPRequestSerializer serializer] 
           multipartFormRequestWithMethod:@"POST" 
           URLString:apiPostPhoto(singleton.userId, @"icon") 
           parameters:nil 
           constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

            NSString *filepath = [[CustomFunctions getFilesPath] stringByAppendingPathComponent:@"icon.png"]; 
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:filepath] name:@"uploadicon" error:nil]; 
           } error:nil 
           ]; 
     AFHTTPRequestOperation *operationUploadOne = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

     [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

      NSLog(@"uploadlogo:%@",operation.responseString); 
      [[NSUserDefaults standardUserDefaults]setObject:operation.responseString forKey:KEY_LOGO_TIMESTAMP]; 

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"uploadlogo:%@",[error description]); 
     }]; 
     [operation addObserver:self forKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew context:nil]; 

     [myQueue addOperation:operationUploadOne]; 

       AFHTTPRequestOperation *operationUploadTwo = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
      [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

    } 
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    }]; 

      [myQueue addOperation: operationUploadTwo]; 

您可以使用此方法添加更多数量的操作。

[myQueue addOperation:operationUploadTwo];