1

这是我的问题的一些背景......使用 iOS 5 作为我的 iPhone 应用程序的目标,ARC 开启:

我有一个具有UINavigationController. 堆栈上有多个视图被推到顶部。显示的最终视图是UIWebView带有 Google 图片的网站,用户可以选择一张图片并将其发送回UIImageView导航堆栈中先前的视图。然后用户可以点击返回,然后在上一个视图上点击保存UIBarButton以将图像本地保存在他们的设备上。这是堆栈的样子:

MainView -> DetailsView(保存UIBarButton在右上角)-> ImageDisplayView -> WebView(加载了 Google 图片网站)

问题是,当用户使用 Google 图片移动设备上的查看完整图片按钮从 Google 图片(比如说 5MB 的图片)中选择一个大图片时,会引发内存警告并释放其下方的视图。因此,当用户使用 Save 按钮返回 DetailsView 时,Save 按钮现在消失了。这是因为didReceiveMemoryWarning被称为。

所以我的问题是......

  1. 为什么在嵌入式 UIWebView 中显示 5MB 图像时会调用内存警告?

  2. 如何防止内存警告在我的导航堆栈中导致问题(如删除 UIBarButton 视图)较低?

  3. 是否有任何提示/技巧,任何人都知道在 iPhone 应用程序中从 Google 图片手机正确获取全尺寸图片?

要自己尝试这个问题,请UIWebView在一个空白应用程序中创建一个,然后将 Google 图片网站加载到其中。将其安装在您的设备上(3GS 或更低版本会使问题出现得更快),然后将完整图像加载到浏览器中或从浏览器中加载出来……您最终会在调试控制台中收到警告。

4

1 回答 1

4

查看“响应 iOS 中的低内存警告”的 iOS 文档,其中指出“视图控制器会自动清除当前不在屏幕上的所有视图”, 还请查看“视图控制器生命周期”。您的视图控制器将收到 viewWillUnload: 和 viewDidUnload: 消息。下次需要时,您必须使用例如 loadView(如果不使用 Storyboard)重新创建视图。

具体回答您的问题:

  1. 当需要内存但不可用时,会生成内存警告。即使需要一个字节也会触发警告——这取决于需要多少。
  2. 视图被删除;您有责任重新创建它们。如何重新创建它们取决于它们最初是如何创建的(以编程方式、通过 nib 文件、通过故事板)。
  3. 似乎你得到的图像很好,但需要处理低内存警告。
于 2012-04-17T22:48:50.197 回答