问题标签 [didreceivememorywarning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1101 浏览

iphone - didReceiveMemoryWarning 调用但没有 viewDidUnload?

我遇到了调用 didReceiveMemoryWarning 但未调用 viewDidUnload 的情况。didReceiveMemoryWarning 的文档说:

此方法的默认实现检查视图控制器是否可以安全地释放其视图。如果视图本身没有超级视图并且可以从 nib 文件或使用自定义 loadView 方法重新加载,则这是可能的。如果可以释放视图,则该方法将其释放并调用 viewDidUnload 方法。

视图控制器当时不可见,但它是模态的父级(通常在发出内存警告时位于图像选择器下)。看起来视图应该能够被释放,但也许我错过了一些东西。

这很重要的原因是我已经在 didReceiveMemoryWarning 中释放了一些缓存数据,假设 viewDidLoad 将在重新加载视图时被调用。但是由于 viewDidUnload 没有被调用,所以 viewDidLoad 在再次显示视图时也不会被调用......

0 投票
1 回答
1122 浏览

iphone - 加载 webview iphone 时应用程序获得内存警告级别 2

在我的应用程序中,我有一个表格视图,点击几个单元格,我启动 webview,但我的应用程序崩溃,甚至在 webview 加载之前给我内存警告级别 2。我已经清除了大部分内存泄漏。我应该如何回应这个内存警告?

他们说我必须卸载不需要的视图。我在这里有点困惑。我应该在这里卸载 webview、tableview 什么?

有人可以帮忙吗?

提前谢谢。

0 投票
2 回答
316 浏览

iphone - 使用 didRecieveMemoryWarning 到底部

我必须使用 didRecieveMemoryWarning 方法进行到底。我已经在这个论坛上阅读了大约 30 个关于这个主题的主题。每个答案都是不同的。

  1. 第一个问题。您应该在 didRecieveMemoryWarning 中释放对象还是将它们设置为 nil?或两者?

  2. 我已经读过我应该在 didRecieveMemoryWarning 方法中释放 tableView 数据源,如果你有的话。我还读到你应该在这个方法中发布 IBOutlets。我很困惑,这里什么是正确的?

  3. 只有我在 viewDidLoad 中启动的对象我应该在 didRecieveMemoryWarning 中释放吗?或者是我刚刚分配给的属性,例如:labelTitleText.text = @"Woodie Guthrie"?labelTitleText 是我的头文件中的一个属性。

在我今天的应用程序中,我在我的dealloc方法中发布了所有内容(也像上面的示例一样分配了标签)。这感觉不对。

我真的很感激一个小代码示例,这样它就更容易理解了,这是其他线程所缺少的,我注意到了。

祝大家有个美好的一天!

0 投票
2 回答
1648 浏览

ios - 为什么我的 iPhone 应用程序在收到内存警告时会崩溃?

这对我来说有点神秘。我的应用程序使用的内存不多,但如果我将它放在后台并尽可能多地运行内存密集型应用程序,有时我的应用程序会在我尝试唤醒它时崩溃。

我查看了崩溃日志,这就是我所看到的:

如您所见,我的视图控制器MailboxViewController收到一条didReceiveMemoryWarning消息。由于该视图没有任何可以真正释放的内存,我只需调用[super didReceiveMemoryWarning].

奇怪的是,我没有看到对视图控制器的viewDidUnload. 它似乎在到达那里之前就因“EXC_BAD_ACCESS (SIGSEGV)”而崩溃。

发生了什么事,我该如何解决?

0 投票
1 回答
1076 浏览

iphone - 如何释放包含引用其父视图的视图控制器

这是一个有趣的问题。我有一个视图控制器,我们称之为 MyViewController。它的成员之一是一个自定义视图,我们称之为 MyCustomView。MyCustomView 还具有对其父级 MyViewController 的引用,因为 MyViewController 用作自定义视图的委托。卸载 MyViewController 时会出现问题,例如由于内存警告。这是发生的事情:

首先,为 MyViewController 调用 viewDidUnload。它看起来像这样:

当 self.myCustomView = nil 被执行时,它会触发 myCustomView 被释放。MyCustomView 的 dealloc 例程如下所示:

回想一下,委托是 MyViewController。如果首先释放 MyCustomView,这不会有问题,因为 MyViewController 的引用计数将大于 1,但在这种情况下,MyViewController 已经没有其他引用了。这会导致 MyViewController 被释放,即调用它的 dealloc 例程,如下所示:

如您所见,MyViewController 的成员,即“somedata”在 MyViewController 的 viewDidUnload 例程完成之前获得释放。随着 MyViewController 和 MyCustomView 的 dealloc 例程完成,我们回到完成 viewDidUnload 例程,我们开始

现在,somedata 不是 nil,但它的值已经被释放了!这会导致异常。

这似乎是引用计数中的一个严重缺陷。您如何处理像这样的对象中导致彼此被释放的双向引用?

一种答案是在 dealloc 例程中始终将成员设置为 nil。我不喜欢这个答案。这是很多额外的工作,大部分时间都不需要。另一个答案是重新排列 viewDidUnload 的顺序,以便可能具有向后指针的子对象的释放总是在最后发生。我也不喜欢这个解决方案,有时它甚至可能不起作用。

你如何解决这个问题?

0 投票
2 回答
604 浏览

iphone - iPhone memory management, making my app crashproof for multiple devices

I'm developing an app which uses a UIScrollView to show a list of images based on search criteria. Using a button the user can load more images.

When testing on an iPhone 4 the ViewController receives a memory-warning at ~750 images. When testing on an iPod 2nd generation a memory warning is received at ~150 images.

My understanding is that when didReceiveMemoryWarning is called, one can free memory by releasing objects but recovery from low memory is not guaranteed.

I've implemented didReceiveMemoryWarning and release basically all objects. In instruments I see memory usage drop back to ~3MB. The first time the iPod reaches its memory limit all goes well, memory is released and the app resumes normal operation. The second time however, when didReceiveMemoryWarning is called, I can see the objects released, but the app crashes anyway.

So, how do I make my app crash proof? I want to make sure that all devices running the app can load as much images as memory allows but I also want to make sure that the app doesn't crash.

I would prefer the app never to reach didReceiveMemoryWarning and set a limit to the number of images that can be displayed, but how can I determine how many images each possible device should be able to load?

Furthermore, the size of the images is not guaranteed. While testing I come to this arbitrary number of 150 on an iPod, but what if the images on the server at some point in time are twice as big? Then the app would probably crash at 75 images.

Any sugestions?

0 投票
1 回答
1956 浏览

objective-c - didReceiveMemoryWarning - 如何区分警告级别

如何区分 didReceiveMemoryWarning 中的两个内存警告级别?

我想警告用户发生了什么,但只有在第 2 级(更关键)时。有人知道如何编码吗?

谢谢你!

0 投票
2 回答
1448 浏览

iphone - UIScrollView 的 iPhone 内存警告问题

我正在开发一个 iPad 应用程序,该应用程序允许用户滚动浏览多个图像(通常在单个水平滚动视图中大约 20 个 .jpg 文件)。每个文件大小约为 200 kb。图像被设置为 UIButton 的“背景”属性,因为我想让用户单击按钮来保存图像。每次我运行该应用程序时,它都会在滚动一段时间后崩溃。如果你不滚动,它表现正常。我确实使用性能工具运行了该应用程序,但没有发现任何泄漏。

在应用程序崩溃之前,我收到“Level=1”内存警告。我让它在滚动视图中运行了大约 8 张图像,从来没有遇到过问题。所以我知道它与滚动视图和图像/按钮有关。在“viewDidLoad”方法中,我简单地做了以下设置滚动视图,然后在 Interface Builder 中链接它:

关于如何让它发挥作用的任何想法?我将图像直接添加到 Interface Builder 中的按钮中。如果我删除背景图像,而是在“viewDidLoad”方法中设置背景,会有帮助吗?任何帮助,将不胜感激。

0 投票
2 回答
4049 浏览

ios - 为什么 iOS 不自动旋转从 Nib 加载的视图在被 didReceiveMemoryWarning 释放后?

我的 iPad 应用大量使用了自动旋转。这很棒。但是,我注意到,如果隐藏视图由(如此处所述)的默认实现释放didReceiveMemoryWarning当视图从笔尖重新加载并且我碰巧处于横向时,它会以纵向加载它。这会对界面造成严重破坏,直到我手动旋转 iPad 并强制它转到正确的方向。

我曾假设 iOS 会以当前方向加载视图;这就是应用程序启动时所做的事情。但它不,不是在被卸载后didReceiveMemoryWarning。为什么不?我怎样才能让它做到这一点?

0 投票
1 回答
1283 浏览

ios - didReceiveMemoryWarning,2 级,仅使用约 3MB

我的 iPad 应用程序有许多导航控制器,这些控制器的选择取决于列表的选择(有点像标签栏控制器的工作方式 - 或者查看苹果远程应用程序并选择 Radio,你应该明白这一点)。

我已将每个导航控制器的最大深度限制为 50。我还定期清理非显示视图控制器的不必要 RAM 使用,或者当我收到 didReceiveMemoryWarning 时。

使用仪器,内存使用量不会超过 3.5MB。

如果我将总共大约 75 个控制器推到导航控制器上,我会收到 2 级警告并且我的应用程序被终止。

为什么是这样?我能做些什么呢?