2012-01-16 75 views
3

我通過AfNetworking發送大量的圖像文件到Rails服務器上邊緣,有時3G我得到這個錯誤:錯誤域= NSPOSIXErrorDomain代碼= 12「該操作無法完成。 。無法分配內存」AFNetworking錯誤域= NSPOSIXErrorDomain代碼= 12「無法完成操作無法分配內存

這是我使用發送文件的代碼:https://gist.github.com/cc5482059ae3023bdf50

有沒有辦法解決這個問題

網上有些人認爲,一個解決方法是將流?的文件。我一直沒能找到有關流媒體使用AFNetworking多個文件教程。我怎樣才能做到這一點?

回答

1

有多大的圖像?有多少是你想送?

我似乎不能鰭d一個簡單的方法,使用AFNetworking來實現NSInputStream,但絕對有一件事你應該嘗試,這是避免把大對象放在自動釋放池中。當你創建一個大的NSData實例時,在for循環中,並且這些實例將進入autorelease池,只要循環持續,所有內存都會一直存在。這是一個方式來優化它:

for (int i=0; i<[self.sImages count]; i++) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSData *imageData = UIImageJPEGRepresentation([self.sImages objectAtIndex:i], 0.7); 
    [formData appendPartWithFileData:imageData name:@"pics[]" fileName:@"avatar.jpg" mimeType:@"image/jpeg"]; 
    pool drain]; 
} 

或者,如果你使用LLVM3:

for (int i=0; i<[self.sImages count]; i++) { 
    @autoreleasepool { 
     NSData *imageData = UIImageJPEGRepresentation([self.sImages objectAtIndex:i], 0.7); 
     [formData appendPartWithFileData:imageData name:@"pics[]" fileName:@"avatar.jpg" mimeType:@"image/jpeg"]; 
    } 
} 
0

我知道它已經有一段時間,因爲這個問題被問,但我只是給我的兩個關於此事的美分。

共度這個星期在這裏想弄清楚這個東西出更好的一部分後的我在哪裏現在:

  • 這個問題發生在我身上的輕微碰傷了舊iPhone 4運行iOS 5.1。 1
  • 似乎無法重現它在沒有撞壞了iPhone 4S運行的iOS相同5.1.1

可能是因爲手機硬件本身,也可能是對需要油門故障聯網帶寬(或者NSURLConnection中的一個錯誤):

http://aws.amazon.com/articles/0006282245644577

https://forums.dropbox.com/topic.php?id=25351

POSIX error 12 ("Cannot allocate memory") while uploading files from an iPhone

我會搬到ASIHTTPRequest,但它不再保持,所以它現在的價值實現。也許我應該嘗試AFNetworking,但我真的開始認爲這是已經在iOS中修復的問題(或者在我的情況下可能是劣質iPhone)。

但我不能爲我的生活找到一個簡單的解釋。

相關問題