我通过AfNetworking将大量图像文件发送到Rails服务器。在边缘,有时3G我得到这个错误:错误域= NSPOSIXErrorDomain代码= 12“操作无法完成。无法分配内存”。
这是我用来发送文件的代码:https://gist.github.com/cc5482059ae3023bdf50
有没有办法解决这个问题?
在线有些人建议解决方法是流式传输文件。我无法找到有关使用AFNetworking流式传输多个文件的教程。我怎么能这样做?
答案 0 :(得分:1)
图像有多大?你有多少人要发送?
我似乎找不到使用NSInputStream
实现AFNetworking
的简单方法,但是你应该尝试一件事,这就是避免在自动释放池中放置大对象。当您创建大型NSData实例时,会发出一个for循环,并且这些实例将转到自动释放池,只要循环持续,所有内存都会存在。这是优化它的一种方法:
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"];
}
}
答案 1 :(得分:0)
我知道自从提出这个问题已经有一段时间了,但我只需要就这件问题给出两分钱。
花了一周的大部分时间试图把这些东西拿出来,这就是我现在所处的位置:
可能是因为手机硬件本身的网络故障,或者可能是需要限制带宽(或者仅仅是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)。
但我不能为我的生活找到一个简单的解释。