AFNetworking Error Domain = NSPOSIXErrorDomain Code = 12“操作无法完成。无法分配内存

时间:2012-01-16 02:12:29

标签: ios nsurl nsurlrequest afnetworking

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

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

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

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

2 个答案:

答案 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)

我知道自从提出这个问题已经有一段时间了,但我只需要就这件问题给出两分钱。

花了一周的大部分时间试图把这些东西拿出来,这就是我现在所处的位置:

  • 这个问题发生在一个稍微受到攻击的旧版iPhone 4上,运行iOS 5.1.1
  • 似乎无法在运行相同iOS 5.1.1的没有撞击的iPhone 4S上重现它。

可能是因为手机硬件本身的网络故障,或者可能是需要限制带宽(或者仅仅是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)。

但我不能为我的生活找到一个简单的解释。