问题标签 [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 回答
346 浏览

ios - ios UIViewController 没有调用 viewDidUnload

当我模拟内存警告时,viewDidUnload应该在未使用的对象上运行,对吗?

我该如何弄清楚为什么我的 UIView 不会消失?

仅供参考,我正在使用ARC,每一个ivar都是一个IBOutlet,看起来像:

0 投票
2 回答
288 浏览

iphone - 正确使用 viewDidUnload

我知道以前有人问过类似的问题。但是我已经搜索了一段时间了,事情仍然有些混乱。所以这里...

我没有使用 ARC。如果您有一个带有实例变量和如下属性的视图控制器:

视图控制器.h:

视图控制器.m:

这是实现 viewDidUnload 的正确方法吗?设置 someDict = nil 似乎是错误的,因为它会泄漏,因此我的猜测是释放。这同样适用于 someOtherView 因为它没有保留?

我在这里错了吗?感谢您的帮助!

0 投票
2 回答
219 浏览

objective-c - 将东西放入我的视图控制器的 viewDidUnload 没有任何效果

有一个UIViewController方法-(void)viewDidUnload。我尝试NSLog("unloaded");在那里查看视图何时被卸载,但控制台上没有打印任何内容。

我应该把我的代码放在哪里,以便在视图卸载之前我可以执行一个操作?

0 投票
1 回答
1546 浏览

iphone - 使用ARC时将对象设置为零?

我正在使用ARC. 该应用程序是一个基于导航的应用程序,使用UINavigationController.

典型的用例是从“主要”UIViewController到“次要”UIViewController多次,可能多达 100 次。辅助控制器有很多静态的本地 PNG 图像,其中一些是重复的。

我正在分析应用程序,我可以看到,当从“主”控制器转到“辅助”控制器时,它分配了大约 0.8 MB,但是,当按下后退按钮时,它不会释放内存。因此,当我再次访问辅助控制器时,分配了其他 0.8 MB,依此类推...

调试时,我注意到从不调用viewDidUnload:辅助UIViewController的方法,但我还读到这是我应该将控制器保存的引用设置为零的方法。这样做viewDidDisappear:无济于事,因为我希望仅在按下后退按钮时发生这种情况,即从堆栈中弹出控制器时(在堆栈中viewDidDisappear:推送另一个控制器时也会调用该方法)。

所以问题是:在哪里我必须这样做?我可以强制调用该方法吗?这种行为是否正常(分析,在“main”->“secondary”->“main”->“secondary”-> ...的一些循环之后分配增加到 20MB)??

谢谢大家

0 投票
2 回答
930 浏览

objective-c - UIPopoverController 的 contentViewController.viewDidUnload 没有被调用

当我使用 aUIPopoverController并给它一个 contentViewController 时,我似乎无法正确释放 contentViewController(正如 contentViewController.viewDidUnload 永远不会被调用的事实所证明的那样)。

创建和显示弹出窗口的代码:

现在我假设contentViewController(在上面的代码中,这是PopoverTestViewController应该在关闭时被释放UIPopoverController(无论是通过单击它,还是显式地关闭它)。但viewDidUnload永远不会被调用。但是,我确实注意到,如果我为 定义了一个 dealloc 方法PopoverTestViewController,则该方法会被适当地调用。

所以我的问题是:为什么viewDidUnload永远不会被调用?(我正在使用ARC)。

0 投票
1 回答
971 浏览

ios - Set nil to child view controllers in viewDidUnload

My iOS app is navigation-based with the following structure:

viewControllerB and viewControllerC get instantiated before ViewControllerA's navigationController pushes them.

In my understanding, everything that is retained in ViewControllerA should be set to nil in ViewControllerA's viewDidUnload. Should I do the same to child view controllers? Like this:

I found an issue when there was "received memory warning" initiated from viewControllerC. Afterward, viewDidUnload of the parent view controller (i.e. viewControllerA) was called, thereby setting nil to 'viewControllerB'. Unexpectedly, viewDidUnload of viewControllerB is also called. So I got "message sent to deallocated object" if I set nil to viewControllerB's subviews (in viewControllerB's viewDidUnload).

Does it mean that I should not set nil to child view controllers? What is the best practice for memory management in this situation?

P.S. I use ARC.

0 投票
3 回答
1034 浏览

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

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

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

0 投票
1 回答
139 浏览

viewdidload - 我应该写 [super viewDidLoad] 吗?

我正在编写一个基于导航的应用程序。(它也有模态序列)我不确定我是否应该继续[super viewDidLoad];打电话。我应该在这行代码之后还是之前写代码?和类似的怎么样[super viewDidUnload];

0 投票
2 回答
1281 浏览

objective-c - didReceiveMemoryWarning 崩溃

- 使用 ARC

-我有 5 个独立的视图控制器,它们都继承了我创建的名为“UIViewControllerWithLoadingView”的类,该类是 UIViewController 的子类。

- 在子类和超类中,我分配和解除分配属性如下:

- 现在当 didReceiveMemoryWarning 被调用时,子类 viewDidUnload 方法可以正常工作。BBBUUTTT 如果我在超类 UIViewControllerWithLoadingView 中将属性设置为 nil,应用程序将崩溃。特别是在我将子类的属性设置为零的地方。所以现在我只是没有在超类中将属性设置为 nil,这会成为问题,因为活动字节只是在运行时不断堆积。

0 投票
1 回答
362 浏览

ios - popViewController 到使用 UIStoryboardSegue 初始化的 UIViewController

我有一个列表控制器,它触发一个performSegueWithIdentifier加载所选项目的 detailViewController。为了初始化 detailViewController,我在它上面设置了一个属性,在prepareForSeguedetailView 显示之前调用它。这一切都很好。

但是...
从详细视图中,我导航到执行一些内存密集型操作的控制器,并且我的 detailViewController 最终被卸载viewDidUnload并被调用。

现在用户按下标题栏中的后退按钮导致popViewController触发。当我viewDidLoad的 detailViewController 方法再次执行时,我没有机会在显示之前设置适当的属性。所以此时我的控件都没有显示正确/任何信息。

一旦它被释放并且用户导航回它,重新初始化我的 detailViewController 上的属性的最佳方法是什么?我曾想过在我的 AppDelegate 上设置“selectedItem”以在这种情况下使用,但这似乎是一个 hack。

提前致谢!