Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我的UIImageView中的大图像导致我的UINavigationController堆栈中的较低视图被释放。。。我该如何解决这个问题?_Iphone_Objective C_Ios_Xcode_Cocoa Touch - Fatal编程技术网

Iphone 我的UIImageView中的大图像导致我的UINavigationController堆栈中的较低视图被释放。。。我该如何解决这个问题?

Iphone 我的UIImageView中的大图像导致我的UINavigationController堆栈中的较低视图被释放。。。我该如何解决这个问题?,iphone,objective-c,ios,xcode,cocoa-touch,Iphone,Objective C,Ios,Xcode,Cocoa Touch,以下是我的问题的一些背景。。。。使用iOS 5作为我的iPhone应用程序的目标,ARC开启: 我有一个应用程序有一个UINavigationController。堆栈上有多个视图被推到顶部。显示的最后一个视图是带有Google Images网站的UIWebView,用户可以选择图像并将其发送回导航堆栈中上一个视图上的UIImageView。然后,用户可以回击,然后在上一个视图上点击SaveUIBarButton将图像本地保存到设备上。以下是堆栈的外观: MainView->DetailsVie

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

我有一个应用程序有一个
UINavigationController
。堆栈上有多个视图被推到顶部。显示的最后一个视图是带有Google Images网站的
UIWebView
,用户可以选择图像并将其发送回导航堆栈中上一个视图上的
UIImageView
。然后,用户可以回击,然后在上一个视图上点击Save
UIBarButton
将图像本地保存到设备上。以下是堆栈的外观:

MainView->DetailsView(右上角带有Save
UIBarButton
)->ImageDisplayView>WebView(带有谷歌图像) 网站(已加载)

问题是,当用户使用Google Images Mobile上的View Full image(查看完整图像)按钮从Google Images(谷歌图像)中选择一个大图像(比如5MB图像)时,会抛出一个内存警告,并释放下面的视图。因此,当用户使用Save按钮返回DetailsView时,Save按钮现在不见了。这是因为调用了
didReceiveMemoryWarning

所以我的问题是

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

  • 如何防止内存警告在我的导航堆栈中引起问题(如删除UIBarButton视图)

  • 是否有任何人都知道在iPhone应用程序中正确地从Google images mobile获取全尺寸图像的技巧/窍门


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

    查看iOS文档中的“响应iOS中的内存不足警告”,其中说明“视图控制器自动清除当前屏幕外的所有视图”,还可以查看“视图控制器生命周期”。视图控制器将获得viewWillUnload:和viewDidUnload:消息。下次需要视图时,您必须使用loadView(如果不使用故事板)重新创建视图

    具体回答您的问题:

  • 当需要内存但不可用时,将生成内存警告。即使只需要一个字节也会触发警告——这取决于需要多少字节
  • 意见将被删除;你有责任重新创造它们。如何重新创建它们取决于它们最初是如何创建的(通过编程方式,通过nib文件,通过故事板)
  • 看起来你得到的图像很好,但需要处理内存不足的警告

  • 查看iOS文档中的“响应iOS中的内存不足警告”,其中说明“视图控制器自动清除当前屏幕外的任何视图”,还可以查看“视图控制器生命周期”。视图控制器将获得viewWillUnload:和viewDidUnload:消息。下次需要视图时,您必须使用loadView(如果不使用故事板)重新创建视图

    具体回答您的问题:

  • 当需要内存但不可用时,将生成内存警告。即使只需要一个字节也会触发警告——这取决于需要多少字节
  • 意见将被删除;你有责任重新创造它们。如何重新创建它们取决于它们最初是如何创建的(通过编程方式,通过nib文件,通过故事板)
  • 看起来你得到的图像很好,但需要处理内存不足的警告

  • 就连苹果的safari也有这样的问题。我在timeline视图中看到了移动版的Facebook crash safari,就连苹果的safari也有问题。我在时间轴视图中看到了Facebook crash safari的移动版。如果不使用故事板或常规nib。在这两种情况下,都应该在viewDidLoad中重新设置视图+1用于文档参考和生命周期概要。如果不使用故事板或常规nib。在这两种情况下,都应该在viewDidLoad中重新设置视图+1用于文档参考和生命周期概要。