我通过 AfNetworking 将大量图像文件发送到 Rails 服务器。在边缘,有时是 3G 上,我收到此错误:错误域 = NSPOSIXErrorDomain 代码 = 12“操作无法完成。无法分配内存”。
这是我用来发送文件的代码:https ://gist.github.com/cc5482059ae3023bdf50
有没有办法解决这个问题?
在线有人建议解决方法是流式传输文件。我还没有找到关于使用 AFNetworking 流式传输多个文件的教程。我怎样才能做到这一点?
我通过 AfNetworking 将大量图像文件发送到 Rails 服务器。在边缘,有时是 3G 上,我收到此错误:错误域 = NSPOSIXErrorDomain 代码 = 12“操作无法完成。无法分配内存”。
这是我用来发送文件的代码:https ://gist.github.com/cc5482059ae3023bdf50
有没有办法解决这个问题?
在线有人建议解决方法是流式传输文件。我还没有找到关于使用 AFNetworking 流式传输多个文件的教程。我怎样才能做到这一点?
图片有多大?你想发送多少?
我似乎找不到一种简单的方法来实现NSInputStream
using AFNetworking
,但是您肯定应该尝试一件事,那就是避免将大对象放入自动释放池中。当您在 for 循环中创建大型 NSData 实例时,这些实例将进入自动释放池,只要循环持续,所有这些内存就会一直存在。这是优化它的一种方法:
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"];
}
}
我知道这个问题被问到已经有一段时间了,但我只需要在这件事上给我两分钱。
在花了一周的大部分时间试图弄清楚这些东西之后,这就是我现在所处的位置:
可能是因为电话硬件本身的网络故障,或者可能是需要限制带宽(或者只是 NSURLConnection 中的一个错误):
http://aws.amazon.com/articles/0006282245644577
https://forums.dropbox.com/topic.php?id=25351
从 iPhone 上传文件时出现 POSIX 错误 12(“无法分配内存”)
我会转移到 ASIHTTPRequest 但它不再维护,所以现在值得实施。也许我仍然应该尝试 AFNetworking,但我真的开始认为这是一个已经在 iOS 中修复的问题(或者在我的情况下可能是劣质 iPhone)。
但我终其一生都找不到一个简单的解释。