3

我通过 AfNetworking 将大量图像文件发送到 Rails 服务器。在边缘,有时是 3G 上,我收到此错误:错误域 = NSPOSIXErrorDomain 代码 = 12“操作无法完成。无法分配内存”。

这是我用来发送文件的代码:https ://gist.github.com/cc5482059ae3023bdf50

有没有办法解决这个问题?

在线有人建议解决方法是流式传输文件。我还没有找到关于使用 AFNetworking 流式传输多个文件的教程。我怎样才能做到这一点?

4

2 回答 2

1

图片有多大?你想发送多少?

我似乎找不到一种简单的方法来实现NSInputStreamusing 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"];
    }
}
于 2012-06-01T19:29:49.623 回答
0

我知道这个问题被问到已经有一段时间了,但我只需要在这件事上给我两分钱。

在花了一周的大部分时间试图弄清楚这些东西之后,这就是我现在所处的位置:

  • 这个问题发生在运行 iOS 5.1.1 的旧 iPhone 4 上
  • 似乎无法在运行相同 iOS 5.1.1 的未损坏的 iPhone 4S 上重现它

可能是因为电话硬件本身的网络故障,或者可能是需要限制带宽(或者只是 NSURLConnection 中的一个错误):

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

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

从 iPhone 上传文件时出现 POSIX 错误 12(“无法分配内存”)

我会转移到 ASIHTTPRequest 但它不再维护,所以现在值得实施。也许我仍然应该尝试 AFNetworking,但我真的开始认为这是一个已经在 iOS 中修复的问题(或者在我的情况下可能是劣质 iPhone)。

但我终其一生都找不到一个简单的解释。

于 2013-01-18T14:40:26.183 回答