问题标签 [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 投票
4 回答
291 浏览

iphone - 在我的项目中陷入内存泄漏

我正在使用 UIImage 选择器、本地通知、事件日历、日期选择器、Facebook 共享、声音、导航控制器、数据库。我的应用程序在一段时间后崩溃,原因不一样,有时内存已满,有时太多其他收到内存警告。请指导我一般如何才能消除泄漏?

0 投票
1 回答
1630 浏览

asynchronous - AVURLAsset loadValuesAsynchronouslyForKeys,同步版?

有没有办法以同步方式加载 AVURLAsset?我的场景是我需要在后台加载资产,同时显示不同的视图,并在资产准备好播放时更改为显示 AVPlayer 的视图。不是以前。

我已经尝试加载异步并调用委托方法来告诉“资产已准备好,您可以显示下一个视图”,但如果我在此之前收到内存警告,则包含后台资产的视图会在完成之前释放加载...所以我从来没有接到委托电话。这就是为什么我宁愿同步进行。

有任何想法吗?

0 投票
1 回答
42 浏览

iphone - 如果用户以前在此页面上,我如何实现自动跳转到详细页面(或修复我的代码以执行此操作,该代码存在设计缺陷)

关于如何解决这个问题的任何建议,或者更好的实现设计?

要求

  • 需要一种方法让应用程序在启动时将用户带到上一个详细信息页面,如果这是他们在上次会话中退出应用程序之前所做的事情
  • 如果他们在应用程序的主屏幕上,那么在重新启动时他们可以留在这里
  • 假设我正在使用 UINavigationController 并且主屏幕和详细信息屏幕构建在 UITableViewController 上

我的实施理念

  • 检查“viewdidLoad”以查看它们是否在详细屏幕上,如果是,则跳转到此(参考下面的代码)

问题

  • 正常工作,但是当我触发内存警告时,事情就搞砸了,我得到导航栏的奇怪行为。例如,当我看起来像是在详细页面内容(UITableView)上时,我看到了主页导航按钮

我的分析

  • 从我在详细信息页面(appointmentsListController)上看到的并在模拟器中引起内存警告时,我看到:

    (a) 主页“viewDidLoad”实际上被调用了,这是我的概念没有预料到的,所以当我从详细视图 (UINavigationController) 中点击 BACK 按钮转到主视图 (RootViewController) 时,实际上是我的代码正在运行,它会尝试再次将用户返回到详细信息页面

    (b) 在此之后,我在日志中注意到 [AppointmentListController viewDidLoad] 似乎在调用之前的 AppointmentListController dealloc 方法之前被调用(即,就像我在控制器 A 中,回到控制器 B,但又被扔回 A -并且第一部分的初始dealloc直到很晚才开始......)

  • 所以我想很明显我的想法不太好

问题

关于如何更好地实现我的要求的任何建议?(如何检查,放入哪种方法)

代码

0 投票
2 回答
1547 浏览

ios - didreceivememorywarning 导致可见视图控制器上的 viewdidunload

当当前可见的视图控制器(superview!= nil)被卸载时,我对如何处理内存警告感到非常困惑。设置是一个作为 rootViewController 的 tabbarcontroller,一个导航控制器,其中有一个视图控制器,比如视图控制器 A。我将视图控制器 B 推送到视图控制器 A 的导航堆栈上。我模拟内存警告。

1) 视图控制器 A 收到内存警告,并且它的视图已卸载,一切正常。

2) 视图控制器 B(当前可见)收到内存警告。我打印出它的超级视图。我什至确认导航控制器的

3)接下来我知道,可见视图控制器的视图已被卸载(视图控制器的 viewDidUnload 方法中的断点被命中)

因为我目前正在查看这个视图控制器,所以它的 viewDidLoad 永远不会被再次调用,除非我导航回它。这似乎与那里的许多帖子相矛盾,这些帖子说当 superview != nil 时视图不会被卸载!,我已经调查了整个堆栈!

澄清一下,我没有问在 viewDidUnload 中要做什么,或者要释放什么样的数据等。我试图理解为什么框架将 didReceiveMemoryWarning 发送到显然仍然是视图层次结构的一部分的视图控制器。

想法?

0 投票
1 回答
3288 浏览

ios - 如何在 UINavigationController 堆栈中使用 didReceiveMemoryWarning

我的应用程序在堆栈中有几个 UIViewControllers(在 UINavigationController 下)。在某些情况下,当我在内部 UIViewControllers 中时,我会收到内存警告(通常在设备因后台运行的其他应用程序而过载时发生)。当这些内存警告发生时,应用程序会继续运行(大多数情况下),然后当它返回时会rootViewController重新加载它,但不会填充视图对象(主要是 UIButton 图像)。

我希望实现didReceiveMemoryWarningand applicationDidReceiveMemoryWarning,但我不清楚如何做到这一点。

我正在寻找的最终结果是,当应用程序在内存警告后执行此“重新加载”rootViewController时,它将以与用户开始“潜入”内部 UIViewControllers 之前相同的状态“重新加载”。

  • 我应该如何执行?
  • 我应该didReceiveMemoryWarning在每个 UIViewController 中实现默认值吗?
  • 由于内存警告总是发生在内部 UIViewControllers 中,我应该如何让它rootViewController知道它应该运行didReceiveMemoryWarning
  • 我怎么知道rootViewController它应该做哪些设置?换句话说 - 我可以将设置保留在didReceiveMemoryWarning不删除它们的地方,并在激活didReceiveMemoryWarning“召回”它们时让用户看到他们开始“关卡导航”的同一屏幕吗?
0 投票
2 回答
880 浏览

ios - 收到内存警告。iPad 中的级别=1

关于这个问题,我进行了大量研究并得到了不同的建议,但这些 100% 的工作都没有,我有 15 个视图控制器,我正在释放所有不必要的对象、变量和释放图像数据以及所有不必要的东西。我的应用程序不会崩溃,但会收到 Received memory 警告。Level=1 警告,屏幕突然变黑。

此外,如果没有应用程序在后台运行,我在浏览应用程序 10-15 分钟后收到以下警告。如果 ipad 后台运行的应用程序比我在浏览应用程序 5 分钟内得到的错误多。

我已经尝试过以下建议来自其他人的此类问题的答案

  1. 释放- (void)didReceiveMemoryWarning函数中的对象
  2. 更改 MKMapView 的分辨率

请任何人对此问题有其他解决方案,而不是告诉。

提前谢谢..!!

0 投票
1 回答
775 浏览

uiscrollview - UIImageView UIScrollView HighRes 图像内存警告

我在 iPad 上填充了一个 UIScrollView,在横向模式下(1024x768)全屏显示了 10 张以上的照片。我面临一个非常大的问题:我使用 GDC 异步加载所有 UIImageView,并将所有视图作为子视图添加到 ScrollView。当我加载不同的画廊时,首先我删除 UIScrollVIew 中的所有视图,然后异步重新加载所有内容。如果我不快速在画廊之间切换,没有问题;相反,如果我在画廊和其他画廊之间切换,我会收到不同的内存警告和应用程序崩溃。我用仪器看,但是当我将所有视图添加到子视图时,没有泄漏并且内存消耗很密集,但它没有增加。可能是什么问题?也许我可以使用 NSAutoreleasePool 强制清除对象?

0 投票
2 回答
613 浏览

ios - 调试数小时后的 iOs 内存警告

我正在创建一个 iPad 应用程序,但我看到了一些奇怪的行为。我在立方体面上加载纹理图像,每个纹理的大小为 1024x1024px。

当我在我的应用程序上工作一段时间时,我在调试时收到内存警告,并且应用程序崩溃。我工作的时间越多,运行内存警告的次数就越多,在最坏的情况下,每次都会触发内存警告。

当我关闭,然后打开 iPad 应用程序运行正常时,一切都很好并且没有错误(一段时间......)。

是否有可能,当应用程序在调试时崩溃时,它不会释放它的内存?并且在多次崩溃之后,iPad 因之前的泄漏而产生了如此多的垃圾,以至于它无法正常运行?

0 投票
1 回答
1688 浏览

ios - iOS:viewWillUnload?

对于 a UIViewController,如果它的视图被卸载,我想保存(到NSStringivar)用户输入到 a UITextView(或UITextField)中的文本字符串。

我应该在哪里做这个?

我假设UITextViewwill 已经被重置为nilin viewDidUnload,对吗?

所以,我想做这样的事情:

但是viewWillUnload方法是什么?是didReceiveMemoryWarning吗?

0 投票
1 回答
522 浏览

ipad - 如何使用 UISplitViewController 从 viewDidUnload(内存警告后)中恢复

我正在制作一个基于拆分视图的 iPad 应用程序(仅限纵向模式),我想知道如何在viewDidUnload调用后恢复初始状态。

当拆分视图应用程序第一次启动时, -splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 会自动调用(在 之后-viewDidLoad)。我在方法中准备了 UIBarButtonItems。

如果我打开模态对话框或其他东西UIWebViewController(它消耗大量内存),应用程序会收到内存警告,viewDidUnload(s)被调用。

当我关闭模态对话框时,会自动调用 -viewDidLoad,但这次 -splitViewController:willHideViewController:withBarButtonItem:forPopoverController:不会调用。

我准备了 UIBarButtonItems -splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 但它没有被调用,所以按钮被解除了。

在这种情况下,我应该手动调用该方法吗?

我在这里找到了类似的帖子。 https://github.com/grgcombs/IntelligentSplitViewController/issues/6

谢谢。