2015-04-07 159 views
1

我試圖用AFNetworking在後臺模式下上傳多張照片,並且設法讓它工作。
我現在面臨的主要問題是內存,它在上傳超過10張照片的時候用完了我的應用程序。
我在做什麼只是同時發射所有的上傳,因爲我已經閱讀了StackOverflow的一些答案。
現在,這個問題出現了,我想知道如果我做了內存管理的錯誤,或者如果更好的策略是序列化上傳,啓動第一個,當它終止時,開始上傳下一個handleEventsForBackgroundURLSession方法。
在完全更改上傳設計之前,我希望從某人那裏聽到它是否是一個好的選擇,因爲我在這個問題上看到的大多數答案都聲明應該將所有請求放在一起。多張照片背景圖片上傳和內存

謝謝

回答

0

創建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];