AFNetworking Error Domain= NSPOSIXErrorDomain Code= 12 "Impossibile completare l'operazione. Impossibile allocare memoria
-
28-10-2019 - |
Domanda
Sto inviando molti file immagine tramite AfNetworking a un server Rails.Su edge e talvolta 3G ricevo questo errore: Error Domain= NSPOSIXErrorDomain Code= 12 "L'operazione non può essere completata. Impossibile allocare memoria".
Questo è il codice che sto utilizzando per inviare i file: https://gist.github.com/cc5482059ae3023bdf50
C'è un modo per risolvere questo problema?
In linea alcune persone suggeriscono che una soluzione alternativa sarebbe lo streaming dei file.Non sono riuscito a trovare un tutorial sullo streaming di più file utilizzando AFNetworking.Come posso farlo?
Soluzione
Quanto sono grandi le immagini?E quanti stai cercando di inviare?
Non riesco a trovare un modo semplice per implementare un NSInputStream
utilizzando AFNetworking
, ma c'è sicuramente una cosa che dovresti provare, ovvero evitare di inserire oggetti di grandi dimensioni nel pool di rilascio automatico.Quando crei grandi istanze NSData all'interno di un ciclo for, e quelle stanno andando nel pool di rilascio automatico, tutta quella memoria rimane in giro per tutto il tempo che dura il ciclo.Questo è un modo per ottimizzarlo:
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];
}
Oppure, se utilizzi 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"];
}
}
Altri suggerimenti
So che è passato un po 'di tempo da quando è stata posta questa domanda, ma devo solo dare i miei due centesimi sulla questione.
Dopo aver passato la parte migliore della settimana a cercare di capire queste cose, ecco dove sono adesso:
- Questo problema si verifica su un vecchio iPhone 4 leggermente sbattuto con iOS 5.1.1
- Non riesco a riprodurlo su un iPhone 4S non sbattuto con lo stesso iOS 5.1.1
Potrebbe essere a causa di una rete difettosa da parte dell'hardware del telefono stesso o potrebbe essere dovuto alla necessità di limitare la larghezza di banda (o solo a un bug in NSURLConnection):
http://aws.amazon.com/articles/0006282245644577
https://forums.dropbox.com/topic.php?id=25351
Errore POSIX 12 (" Impossibile allocare memoria ") durante il caricamento di file da un iPhone
Sarei passato a ASIHTTPRequest ma non è più mantenuto, quindi ora vale la pena implementarlo. Forse dovrei ancora provare AFNetworking, ma sto davvero iniziando a pensare che questo sia un problema che è già stato risolto in iOS (o potrebbe essere un iPhone scadente nel mio caso).
Ma non riesco a trovare una spiegazione semplice per questo.