问题标签 [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.
ios - ios UIViewController 没有调用 viewDidUnload
当我模拟内存警告时,viewDidUnload
应该在未使用的对象上运行,对吗?
我该如何弄清楚为什么我的 UIView 不会消失?
仅供参考,我正在使用ARC,每一个ivar
都是一个IBOutlet
,看起来像:
iphone - 正确使用 viewDidUnload
我知道以前有人问过类似的问题。但是我已经搜索了一段时间了,事情仍然有些混乱。所以这里...
我没有使用 ARC。如果您有一个带有实例变量和如下属性的视图控制器:
视图控制器.h:
视图控制器.m:
这是实现 viewDidUnload 的正确方法吗?设置 someDict = nil 似乎是错误的,因为它会泄漏,因此我的猜测是释放。这同样适用于 someOtherView 因为它没有保留?
我在这里错了吗?感谢您的帮助!
objective-c - 将东西放入我的视图控制器的 viewDidUnload 没有任何效果
有一个UIViewController
方法-(void)viewDidUnload
。我尝试NSLog("unloaded");
在那里查看视图何时被卸载,但控制台上没有打印任何内容。
我应该把我的代码放在哪里,以便在视图卸载之前我可以执行一个操作?
iphone - 使用ARC时将对象设置为零?
我正在使用ARC
. 该应用程序是一个基于导航的应用程序,使用UINavigationController
.
典型的用例是从“主要”UIViewController
到“次要”UIViewController
多次,可能多达 100 次。辅助控制器有很多静态的本地 PNG 图像,其中一些是重复的。
我正在分析应用程序,我可以看到,当从“主”控制器转到“辅助”控制器时,它分配了大约 0.8 MB,但是,当按下后退按钮时,它不会释放内存。因此,当我再次访问辅助控制器时,分配了其他 0.8 MB,依此类推...
调试时,我注意到从不调用viewDidUnload:
辅助UIViewController
的方法,但我还读到这是我应该将控制器保存的引用设置为零的方法。这样做viewDidDisappear:
无济于事,因为我希望仅在按下后退按钮时发生这种情况,即从堆栈中弹出控制器时(在堆栈中viewDidDisappear:
推送另一个控制器时也会调用该方法)。
所以问题是:在哪里我必须这样做?我可以强制调用该方法吗?这种行为是否正常(分析,在“main”->“secondary”->“main”->“secondary”-> ...的一些循环之后分配增加到 20MB)??
谢谢大家
objective-c - UIPopoverController 的 contentViewController.viewDidUnload 没有被调用
当我使用 aUIPopoverController
并给它一个 contentViewController 时,我似乎无法正确释放 contentViewController(正如 contentViewController.viewDidUnload 永远不会被调用的事实所证明的那样)。
创建和显示弹出窗口的代码:
现在我假设contentViewController
(在上面的代码中,这是PopoverTestViewController
)应该在关闭时被释放UIPopoverController
(无论是通过单击它,还是显式地关闭它)。但viewDidUnload
永远不会被调用。但是,我确实注意到,如果我为 定义了一个 dealloc 方法PopoverTestViewController
,则该方法会被适当地调用。
所以我的问题是:为什么viewDidUnload
永远不会被调用?(我正在使用ARC)。
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.
ios - 没有 xib 文件的 alloc/init 初始化视图控制器不调用 viewDidUnload
当我通过模拟器模拟任何iOS版本的内存警告时,为什么不viewDidUnload
调用方法,当我不使用xib并使用alloc/init来初始化我的?ViewController
似乎从未调用过此方法。
如果我使用 xib 文件通过 alloc/initWithNibName 创建控制器,则成功调用 viewDidUnload 方法。为什么会这样?所有视图控制器是否都需要 xib 文件才能正常处理内存警告?
viewdidload - 我应该写 [super viewDidLoad] 吗?
我正在编写一个基于导航的应用程序。(它也有模态序列)我不确定我是否应该继续[super viewDidLoad];
打电话。我应该在这行代码之后还是之前写代码?和类似的怎么样[super viewDidUnload];
?
objective-c - didReceiveMemoryWarning 崩溃
- 使用 ARC
-我有 5 个独立的视图控制器,它们都继承了我创建的名为“UIViewControllerWithLoadingView”的类,该类是 UIViewController 的子类。
- 在子类和超类中,我分配和解除分配属性如下:
- 现在当 didReceiveMemoryWarning 被调用时,子类 viewDidUnload 方法可以正常工作。BBBUUTTT 如果我在超类 UIViewControllerWithLoadingView 中将属性设置为 nil,应用程序将崩溃。特别是在我将子类的属性设置为零的地方。所以现在我只是没有在超类中将属性设置为 nil,这会成为问题,因为活动字节只是在运行时不断堆积。
ios - popViewController 到使用 UIStoryboardSegue 初始化的 UIViewController
我有一个列表控制器,它触发一个performSegueWithIdentifier
加载所选项目的 detailViewController。为了初始化 detailViewController,我在它上面设置了一个属性,在prepareForSegue
detailView 显示之前调用它。这一切都很好。
但是...
从详细视图中,我导航到执行一些内存密集型操作的控制器,并且我的 detailViewController 最终被卸载viewDidUnload
并被调用。
现在用户按下标题栏中的后退按钮导致popViewController
触发。当我viewDidLoad
的 detailViewController 方法再次执行时,我没有机会在显示之前设置适当的属性。所以此时我的控件都没有显示正确/任何信息。
一旦它被释放并且用户导航回它,重新初始化我的 detailViewController 上的属性的最佳方法是什么?我曾想过在我的 AppDelegate 上设置“selectedItem”以在这种情况下使用,但这似乎是一个 hack。
提前致谢!