Afnetworking Error Domain = NSPOSIXERRORDOMAIN CODE = 12 "L'opération ne peut pas être terminée. Impossible d'allouer la mémoire
-
28-10-2019 - |
Question
J'envoie beaucoup de fichiers image via Afnetworking à un serveur Rails. Sur Edge et parfois 3G, j'obtiens cette erreur: Domaine d'erreur = NSPOSIXERRORDOMAIN CODE = 12 "L'opération ne peut pas être terminée. Impossible d'allouer la mémoire".
Ceci est le code que j'utilise pour envoyer les fichiers: https://gist.github.com/cc5482059ae3023bdf50
Y'a t'il un moyen d'arranger cela?
En ligne, certaines personnes suggèrent qu'une solution de contournement serait de diffuser les fichiers. Je n'ai pas pu trouver de tutoriel sur le streaming plusieurs fichiers à l'aide d'AFNetworking. Comment puis-je faire ceci?
La solution
Quelle est la taille des images? Et combien essayez-vous d'envoyer?
Je n'arrive pas à trouver un moyen facile d'implémenter un NSInputStream
utilisant AFNetworking
, mais il y a certainement une chose que vous devriez essayer, ce qui est d'éviter de mettre de gros objets dans la piscine d'autorelease. Lorsque vous créez de grandes instances NSDATA Insinde A For Loop, et celles-ci vont à la piscine Autorelease, tout ce que la mémoire reste aussi longtemps que la boucle dure. C'est une façon de l'optimiser:
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];
}
Ou, si vous utilisez 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"];
}
}
Autres conseils
Je sais que cela fait un moment que cette question n'a pas été posée, mais je dois juste donner mes deux cents sur la question.
Après avoir passé la meilleure partie de la semaine à essayer de comprendre ce truc, c'est là que je suis en ce moment:
- Ce problème m'arrive sur un vieil iPhone 4 légèrement frappé en cours d'iOS 5.1.1
- Je n'arrive pas à le reproduire sur un iPhone 4s non frappé exécutant le même iOS 5.1.1
Peut être dû à un réseautage défectueux par le matériel téléphonique lui-même ou peut être sur la nécessité de lisser la bande passante (ou tout simplement un bug dans NSURLConnection):
http://aws.amazon.com/articles/0006282245644577
https://forums.dropbox.com/topic.php?id=25351
J'aurais déménagé sur AsihttpRequest mais il n'est plus maintenu, donc cela vaut maintenant la peine d'être mis en œuvre. Peut-être que je devrais toujours essayer Afnetworking, mais je commence vraiment à penser que c'est un problème qui a déjà été résolu dans l'iOS (ou peut être un iPhone de mauvaise qualité dans mon cas).
Mais je ne peux pas pour la vie de moi en trouver une explication simple.