问题标签 [viewdidunload]

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

iphone - 当在 iphone 中再次打开相同的 uiviewcontroller 时,内存不断增加

我有两个 uiviewcontroller,我正在释放 dealloc 中的所有资源,并在 didunload 中将它们设置为 nil,但是当我遇到两个 viewcontroller 时,内存仍在不断增加。

我正在跟踪这篇文章中使用的内存和释放内存

谁能建议为什么会这样?

这是第二个视图控制器:

0 投票
2 回答
456 浏览

ios - 苹果会拒绝手动调用 viewDidUnload 的应用吗

在 iOS6 中不再调用 viewDidUnload,因此作为在 viewDidUnload 中执行一些必要操作的应用程序的解决方法,我已经这样做了:

苹果拒绝这样的事情有先例吗?由于时间限制,我不能冒险让他们拒绝任何东西。

0 投票
2 回答
2392 浏览

objective-c - 何时调用 [super viewDidLoad] 和 [super viewDIdUnload]?

在我的大部分代码中,我对 viewDidLoad 和 viewDidUnload 进行了以下设置:

但是,我想知道...调用 viewDidLoad 和 viewDidUnload 是否重要?每个人应该在我“做事”之前还是之后?

换句话说,每个人应该在方法的开始还是结束?

编辑:更复杂的是,这是 Apple 的默认 viewDidUnload 方法,“似乎”建议[super viewDidUnload]首先调用它......

0 投票
2 回答
75 浏览

iphone - 以下代码中是否有任何内存泄漏?

我有 uibutton 作为属性并在 dealloc 中释放它。我只是用它来隐藏或取消隐藏,但它的使用频率很高。

0 投票
2 回答
493 浏览

ios - ios5:停止视图被卸载/停止 viewDidUnload 被调用

鉴于 iOS6 不再卸载视图,因此不再调用UIViewController's viewDidUnload,我想知道是否有可靠的方法在 iOS5 上导致同样的行为?

也就是说,我真的很想停止在 iOS5 上卸载我的视图,原因与 Apple 给出的不再在 iOS 6 上卸载视图的原因相同(因为它不再节省任何大量内存,而且几乎总是额外错误的来源)。我宁愿把时间花在开发有用的功能上,也不愿测试很多现在只能在 iOS5 上发生并且只能在低内存中发生的案例!

我四处搜索,找不到以前问过这个问题的人,这让我感到惊讶。是否可以像在中保留对 self.view 的额外引用一样简单viewDidLoad(并且仅在中释放它dealloc)?有没有可能的陷阱?

0 投票
0 回答
441 浏览

ios5 - viewDidUnload 弃用,但是对辅助视图的强引用呢?

在 iOS6 中,该方法viewDidUnload已被弃用,内存管理对于UIViewController. 这里简单介绍一下新模式。
在视图控制器中占用更多内存的部分是视图(当然还有您最终会创建的大量数据)。视图本身不会消耗太多内存,是后备存储,被绘制的部分(最奇怪的是CABackingStore)。这种新模式似乎检查了视图控制器的视图所拥有的所有后备存储所占用的内存是易失性的,这些后备存储未显示在窗口中。当内存警告出现时,该后备存储将从内存中清除。使用这种方法,您可以节省重新创建非常昂贵的视图的过程。
Apple 表示从 iOS5 项目中删除 viewDidUnload/viewWillUnload 是安全的,即使您将部署目标设置为 iOS5,模板也不会显示这些方法。我知道,如果视图拥有的出口很弱,当您在超类实现中释放视图控制器的视图时,由于 ARC,一切都将被正确释放,而不会出现泄漏或僵尸。
因为我真的很欣赏这种新方法,所以我对这种情况没有信心:假设我们有一个视图控制器及其视图,这个视图只是一个内容视图,它将承载在视图控制器的 xib 中创建的不同视图,改变它们在运行时动态。当您为此视图创建出口时,它们会自动创建为强大的,这是有道理的,因为“主视图”不拥有它们。
关于新规则,此视图的后备存储不会被签名为 volatile,因为它们不属于 iOS6 和 iOS5 中的主视图(如果我删除viewDidUnLoad),它们将不会出于相同的原因发布。
我该如何处理这种情况?在 didReceiveMemoryWarning 中释放它们是否正确?但是如果视图只加载一次,我可以在 iOS6 中重新创建它们吗?

0 投票
1 回答
3026 浏览

ios - Cordova iOS 自定义插件:处理内存警告

我正在开发一个使用 cordova(2.1) 和一些自定义插件的 iOS 应用程序。

我试图面对的问题如下:当我显示我的插件(基本上是一个比内置的cordova插件具有更多功能的相机插件)时,有时我会收到一个内存警告,并且随后会卸载包含 webview 的视图. 这对我来说是一个非常大的问题,因为一旦我的 imagePicker 被关闭,webview 就不会恢复。

我查看了 CDVCamera 插件源,我注意到的是:

(1)插件保存webview:

在这里,我不明白发生了什么,好的,我们保存 webview 以防在内存警告后将其卸载,但我无法弄清楚 webview 在框架中的恢复方式/位置。

(2) 插件使用一个名为 hasPendingOperation 的 Bool 属性,如果我理解,CDVViewController 在收到内存警告时使用此属性,以避免在插件处于活动状态时清除内存。

我不明白的第一件事是为什么当我的控制器收到内存警告超级控制器(CDVViecontroller)没有收到它时?

其次,是否可以将 CDVCamera 插件使用的模式与 CDVViewController 一起应用来处理自定义插件中的内存警告?

任何有助于使用cordova管理内存警告以避免webview被卸载的帮助将不胜感激。

0 投票
0 回答
73 浏览

ios - iOS 6.0释放资源的方法

可能重复:
iOS 6 - viewDidUnload 迁移到 didReceiveMemoryWarning?

在 iOS 6.0 viewDidUnload: 和其他一些方法已被弃用。如果我需要释放一些资源,如 UIWebView 或网络连接,我应该使用什么方法?(如果包括 ARC)谢谢。

0 投票
1 回答
60 浏览

automatic-ref-counting - Release retained property pointing at self.view

In an instance of an UIViewController with ARC best practice would be to "release" any retained subviews of the main view (e.g. self.myOutlet = nil) in - viewDidUnload, and my guess is self.view = nil isn't strictly necessary at this point.

What to do if an additional retained property is defined and assigned as...

self.anotherProperty = self.view;

or

_anotherProperty = self.view; // assuming "_anotherProperty" is the ivar

... is self.anotherProperty = nil necessary then?

0 投票
0 回答
252 浏览

ios - didReceiveMemoryWarning 使用标签栏

我有一个UITabBar控股3 UIViewControllers。一个是地图,另一个是表格,第三个是我自己的自定义控制器。我最近注意到我的应用程序在低内存运行时存在一些问题,这是由于我不清楚didReceiveMemoryWarning发生时该怎么做。

通常,当有足够的内存时,所有功能都很好。我会将我的所有控制器都分配到applicationDidFinishLaunchingWithOptions并且所有控制器都工作得很好。

但是当内存有点低时会发生什么(出于某种原因)只有我的表行为不端。首先,我可以看到应用收到了内存警告。然后只有我的桌子得到一个viewDidUnload. 起初我不确定为什么我的桌子变成了*completely empty*,但后来我意识到我的委托方法停止工作,这使得我的reloadData基本上毫无意义。

所以,我现在可以看到它在didReceiveMemoryWarning我所有的 viewController 中级联。但是 viewDidUnload 只在我的桌子上被调用。

我想知道发生了什么事?

  • 如何从 viewDidUnload 中恢复?如果我的观点是零,谁负责把它带回来?为什么只有我的表获得 viewDidUnload?我正在阅读这个链接那个链接,以及一些苹果文档,但没有找到解释为什么我的观点没有恢复。

在这种情况下我应该怎么做?