问题标签 [memory-warning]

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 回答
2577 浏览

java - 当内存不足时自动警告我的 Java 应用程序的好方法是什么?

当可用内存达到某个阈值时,是否有一种优雅的方法可以自动向我的 Java 应用程序发出内存警告?

请注意,这是一个危险风格的问题,我已经有了答案,只是想把它贴在这里让全世界发现,因为这个解决方案帮助了我很多。

0 投票
1 回答
1190 浏览

objective-c - 加载多个本地图像而没有内存警告

好吧,内存管理让我发疯!

这是我的问题:

我有一个 plist,其中包含 n 个对图像的引用。我只是想做的是抓住每个孩子并将其加载到 UIImageView 至极,然后将其添加到启用分页的 UIScrollView 中。

我的问题:

  • 我有 n 张图片。可能只有 3 个,但可能是 60 个或更多。
  • 每个图像都有相当大的分辨率(1152x1536),因为它是可缩放的。

我阅读了 CATiledLayer,并看到了 PhotoScroller 示例,但我想避免使用 CATiledLayer,因为它在显示图像片段时会创建淡入淡出,而在我的项目中,这种效果不适合。

我只是想听听您的意见,您通常如何解决此类任务?

我将在这里留下一段代码:

例如,当我尝试加载 60 张图像时,此代码会使应用程序收到内存警告。

我想你明白了,对吧?

有什么建议么?

提前感谢您的帮助!

0 投票
3 回答
4800 浏览

ios - 使用相机的 UIImagePicker 时总是会收到内存警告

UIImagePicker在我的viewController,

并且有两种方法我总是会收到内存警告,以及非常有名的“wait_fences:未能收到回复:10004003”,

但我无法追踪到提示警告的特定代码行 - 它总是在这些方法之后立即出现在我无法调试的地方。

我已经检查了我的代码,尽我所能发现没有潜在的内存泄漏。

我知道处理照片确实会占用一些内存,因此出现内存警告是正常的。

但有时问题是,当警告出现时,我viewController只是release一些重要的东西,例如用于返回导航堆栈中的 parentView 控制器的一些按钮。

因此,如果我的按钮或其他重要的东西过早释放,我不希望收到内存警告。

有什么办法可以解决吗?

0 投票
0 回答
709 浏览

memory-leaks - UIImagePickerController 的单例类没有帮助

我的项目中有一个视图控制器,我需要在其中单击两个图像并在同一屏幕上以缩放形式显示它们。将两个图像上传到服务器后,可以重复此过程。为了拍照,我使用 UIImagePickerController。点击图片 8 次后,我收到了 1 级和 2 级的内存警告。

当我在 StackOverflow 上提到相关问题时,他们中的大多数人建议将 UIImagePickerController 设为 Singleton 对象。所以我创建了一个新的 Singleton 类,它是 UIImagePickerController 的子类。现在,在我的主视图控制器中,我正在创建这个自定义类的对象并重复使用它。但不幸的是,这也无济于事。点击 8 次图片后,我仍然收到内存警告。

还发布了一些片段-

创建 UIImagePickerController 的子类 --

单例类的实现——

现在在主视图控制器类中——

难道我做错了什么?请各位大侠帮忙!

0 投票
0 回答
274 浏览

ios - 为什么在内存警告后 OpenGL 支持的 UIView 不会显示,而 UINavigationController 堆栈中的另一个视图在它之上

我有一个带有 CAEAGLLayer 支持的子类或 UIView。这个视图不是全屏的,是一个容器 UIView 的子视图。此容器由 UINavigationController 堆栈中的 UIViewController 控制。如果我在堆栈上推送一个新视图然后将其弹出,一切都很好,我仍然可以看到 OpenGL 视图并与之交互。如果我在导航控制器堆栈上推送另一个视图然后触发内存警告,然后弹出该视图,OpenGL 视图仍然存在并呈现其背景颜色,但 OpenGL 内容不可见。在 viewDidAppear 上触发它的 draw 方法,我可以看到它重绘了它的内容(我可以在调试器中逐步执行它的 draw 方法,并且上下文不为空,图层不为空等)但是,在调用 presentRenderBuffer 后,OpenGL 内容不会出现:

显然,发生内存警告时释放了一些东西,但我仍然有一个 UIView 并且它有一个带有 EAGLContext 的 CAEAGLLayer(至少它们不是 nil)。

当视图重新出现时,我尝试在绘制之前销毁并重新创建帧缓冲区和渲染缓冲区,认为这些可能已被释放。

我尝试将 EAGLLayer.drawableProperties 设置为包括设置为 YES 的 kEAGLDrawablePropertyRetainedBacking 键。

为什么OpenGL内容不会出现?

最后一点:我知道 GLKView 可能是我应该使用的,但我需要支持 iOS 4.2。

0 投票
2 回答
218 浏览

ios - Cocos2D 游戏在旧 Ipad 中崩溃

我在 cocos2D 中开发了一个游戏。我曾经在我的旧 Ipad 和我的新 Ipad2(都更新到 IOS 5.0)中构建和运行游戏。在 GDB 中它显示内存警告级别 1 并自动释放未使用的精灵和精灵表。由于这个原因,我的游戏在旧 Ipad 中崩溃,但在我的新 Ipad2 中运行良好。我的旧 Ipad 有什么问题???

0 投票
4 回答
2182 浏览

ios - iOS,检查应用程序是否因为内存不足而崩溃

如何确定崩溃的原因是内存不足?
崩溃日志中有什么具体内容吗?也许我必须使用一些工具或库?

更新:我的应用程序使用大量内存并收到内存警告。减少内存使用非常困难。由于不时出现内存警告,它会崩溃。但我想确保它不会因为其他原因而崩溃。
那么如何检查应用程序崩溃的原因(每次都会收到大量内存警告)

UPDATE2:应用程序有很多 3D 图形和复杂的 UI,需要大量内存来存储纹理。客户不想进行任何类型的“加载...”暂停。如果我在背景中卸载不可见的纹理,我将无法获得流畅的动画。

所以我只需要检测除了内存之外是否有任何崩溃原因

0 投票
3 回答
3639 浏览

c# - MonoTouch:应用程序因内存不足而被杀,为什么?实时字节分配 5 MB 顶部

我的 iPad 应用程序是在 MonoTouch 中开发的,因为我想避免所有的内存管理地狱,但似乎并非如此。在模拟器上一切正常,但是当我在设备上测试我的应用程序时,我惊恐地发现它在一些内存警告后很快被操作系统杀死。我的应用程序是一个简单的图像浏览器,它加载一些 PNG 图像并使用 UIScrollView 中的一些 UIView 显示它们,在触摸时加载下一个或上一个。在模拟器上它工作正常。但是在设备上加载和卸载大约 6-11 个图像后,它开始收到内存警告,然后突然进程被终止。我检查了所有实例化周期,并且在加载新图像之前正确删除了所有引用。

所以我启动了 Instruments 并开始分析我的应用在 iPad 上的内存分配。在那里我发现 Live 字节只有大约 5-9 MB,这正是我的预期,但由于某种奇怪的原因,几乎没有收集到死内存分配,因为在分配了大约 50 MB(小于 5-9 MB它是 Live Bytes)它被杀死了!这是我的应用程序的仪器分析会话的屏幕截图:

记录monotouch下内存分配问题的仪器截图

这是heapshots序列:

我的应用程序在仪器中的快照

也有一些小的泄漏,但我认为它们还不足以成为罪魁祸首。它们都是来自 strdup 的 48 字节泄漏,这是在 iOS 5.1 中发布 UIScrollView 时的一个已知问题:

在此处输入图像描述

即使看起来一切正常,分配的 Live Bytes 仍为 5 MB,但我的应用程序的实际内存呈指数增长,然后在 iPad 上达到 50MB,在 iPhone4S 上达到 314 MB,如 Memory Monitor 报告的那样:

我的应用程序在 iPhone4S 上的内存增长

有人可以告诉我是否有方法或实用程序来发现问题所在和位置?这是monotouch垃圾收集器的错误吗?还是有一些我没有正确处理的物品?以及如何使用探查器找到那些?我已经检查了我的代码两天,但一切似乎都是正确的。

这是我的加载/实例化/处置周期代码:

是否有一种方法可以捕获未正确处理的对象?Instruments 报告活动字节很低,泄漏几乎为零,那么为什么不处理死对象呢?即使我的应用程序几分钟内什么都没发生,GC 似乎也没有完成他的工作,即使我在我的代码中明确地称之为它。我什至尝试了新的实验性垃圾收集器,但让我的应用程序被杀死的情况更糟、更快。

我在 Xamarin 网站上找不到任何用于解决内存警告或跟踪错误分配的指南或分步指南。

非常感谢任何帮助或建议,谢谢!

更新:我降低了一些图像和 uiview 的大小和分辨率,Live Bytes 现在从 9 MB 降至 5 MB,但无论如何,在一些内存警告之后,该应用程序仍然被终止。

更新 2:正如 Javier 所建议的,我已经删除了后台任务并直接进行了调用,并且内存泄漏消失了!似乎 MonoTouch 垃圾收集器有一个错误,当 UIImages 分配和处理在不同的线程中时,它无法收集内存。但是现在当我滚动时,我的应用程序非常没有响应,所以我需要找到一个解决方案来在不同的线程中执行它!但是怎么做?

0 投票
2 回答
223 浏览

objective-c - 背景图像的objective-c内存友好方式

我有一个 ipad 应用程序(>30 个视图/页面)每个视图都有一个独特的背景。

问题:设置背景的最佳方法是什么(内存友好)

有没有比添加:uiimageview“backgroundView”作为子视图更好的方法?

版本1:

视网膜开关似乎有问题

版本2:

第 3 版:

版本 2 似乎工作正常。也许有人告诉我什么是最好的方法,为什么;)

谢谢亚历克斯

0 投票
3 回答
1034 浏览

ios - 没有 xib 文件的 alloc/init 初始化视图控制器不调用 viewDidUnload

当我通过模拟器模拟任何iOS版本的内存警告时,为什么不viewDidUnload调用方法,当我不使用xib并使用alloc/init来初始化我的?ViewController似乎从未调用过此方法。

如果我使用 xib 文件通过 alloc/initWithNibName 创建控制器,则成功调用 viewDidUnload 方法。为什么会这样?所有视图控制器是否都需要 xib 文件才能正常处理内存警告?