【发布时间】:2010-12-27 23:00:55
【问题描述】:
我正在开发一个 iPhone 应用程序,该应用程序涉及将相机中的完整照片(通常在 1.5 到 2.0 MB 之间)及其缩略图(小得多)上传到 Amazon S3。
缩略图总是会成功上传,但有时完整的图像不会,当它们失败时,它们会失败并显示 POSIX 错误代码 12,即 ENOMEM。但是,我添加了调试代码来打印错误发生时的可用内存量,并且总是有相当多的可用内存,通常超过 100 MB。
此外,当通过 3G 进行上传时,错误出现的频率更高,而通过 wifi 上传时出现的频率更少——这看起来很奇怪,因为请求没有下载太多并且正在上传的文件已经在内存中(I'我还尝试过从磁盘流式传输它,但没有任何改进)。
我尝试使用 NSURLConnection、Foundation CFHTTP* 函数和 ASIHTTPRequest 库上传文件,但无论如何,错误发生的频率相同。更奇怪的是,我的谷歌搜索显示最终用户有时会从 Safari 获得错误代码 12——我还没有看到任何 iOS 开发人员提到它。我正在使用继承的代码库,所以它可能有问题,但我什至不确定要寻找什么。任何见解将不胜感激!
【问题讨论】:
-
什么调用返回 ENOMEM?
-
当我使用 NSURLConnection 时,我会在 didFailWithError 委托方法中得到错误——一个带有 POSIX 错误域、错误代码 12 和本地化描述“无法分配内存”的 NSError .当我使用 CFHTTPMessageRef 时,调用 CFReadStreamRead() 时会失败(函数返回 -1),之后 errno 将等于 12。
-
我在 3G 上尝试使用 Google Docs API 上传文件时遇到了同样的问题。 Dropbox API 上的帖子提到了类似的问题:forums.dropbox.com/topic.php?id=25351。它似乎发生在具有大文件的慢速连接 (3G) 上。
-
这似乎是一个必须向Apple报告的错误。
-
是的,它可能是一个合法的错误。我会考虑报告它。