问题标签 [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 - 使用 NavigationController 时视图的内存管理
我将应用程序中的导航从使用 UITabBarController 更改为 u UINavigationController。即以前的解决方案(第 1 版)仅基于 TabBarController - 4 个 ViewControllers(一个简单的 TableView、一个简单的自定义视图和一个带有许多叠加层的 MapView)。第二个版本仅基于 UINavigationController。
在 TabBarController 的情况下,它清晰简单,一切正常,尤其是 MapView。我的意思是:MapView 被加载一次(有大量的叠加层),当我转到另一个视图并返回 MapView 时,MapView 仍然在那里,它的叠加层已经加载并显示(简单检查:调用 MapView 的 viewDidLoad每个应用程序运行一次,我在那里有一些调试消息)。
现在我将导航逻辑更改为 UINavigationController。第一眼一切都很好 - 但是:每次我导航到视图时都会调用 viewDidLoad (对于每个视图)。这很烦人,尤其是在 MapView 的情况下 - 每次都会执行叠加层的加载,这需要一些时间,并且在某些情况下会导致应用程序崩溃。
好的,我的问题:
它是 NavigationController 的某种“常见”行为吗?
我可以更改此行为,以便仅调用一次 viewDidLoad 吗?
还有更多 - 如何影响某些视图的“显示顺序”?
我理解逻辑可能更复杂,但我很感激任何答案或提示;)
一些相关情况:
- TabBar 和 Navigation 控制器未组合。
- 我使用故事板,在 UIB 中设计了 segue,在我的代码中没有像 perfomSegue 或 prepareForSegue 这样的手动调用。一键触发到 MapView 的 segue。
- 我使用 push segues。
- 我也尝试使用模态序列,但没有改变这种行为。
- 在视图之间的 segues 中永远不会调用任何 viewDidUnload。
- 未收到内存警告。
- 在模拟器和 iPhone 4 上都没有测量到内存泄漏。
- 我试图构建一个非常简单的临时项目/应用程序,它只关心导航。没有任何编码的控制器和其他视图,只是故事板。这是同样的行为。
- 当我在一个视图和 MapView 之间快速并定期点击导航按钮和后退按钮时,出现了一个导致应用程序崩溃的问题。在大多数情况下,当我在 MapView 完全显示(即其覆盖)之前点击返回按钮时,应用程序崩溃了。当我添加 1 秒时,它已修复。在 MapView 中 viewDidDisappeared 中的延迟方法调用。我知道,这不是一个公平的解决方案;)
ios6 - iOS 6 中的 NSNotification 和 didReceiveMemoryWarning
从 iOS 6.0 开始,不推荐使用 viewDidUnload 方法。在 iOS 6 之前,我曾经在 viewDidUnload 方法中删除 NSNotification 的Observer。但由于它已弃用,我已将其移至 didReceiveMemoryWarning。现在,如果我的应用收到低内存警告,通知将被删除。所以我用 NSNotification 编写的代码不起作用。
谁能告诉我如何解决这个问题?
提前致谢。
ios - 加载 viewcontroller 后 App 运行缓慢,然后卸载约 15-20 次
使用:Xcode 4.6 Storyboards ARC Model segue to SecondViewController
我有一个应用程序,它的主 ViewController 会在设备向右旋转时加载一个新的 veiwController。当应用程序启动时,一切正常。如果我旋转设备,然后返回卸载 secondview 控制器,大约 15-20 倍的应用程序非常缓慢。我已经缩小范围,它仅在加载第二个视图控制器并且仅当我旋转设备数次时才会发生。我也缩小了范围,这是一个内存问题。我安装了一个应用程序来跟踪使用和可用的内存。当我多次旋转设备时,我的内存从 400mb 变为 900mb。我试图提供尽可能多的信息。每个视图都有 8 个每秒触发的 NSTimer。
有没有办法以编程方式卸载视图,以确保正在卸载?
我已包含此代码以确保加载和卸载:
`- (void)setView:(UIView *)aView { NSLog(@">>> 输入 %s <<<", PRETTY_FUNCTION );
}
日志结果:2013-04-22 16:42:03.588 xxxxxxxx[xxxxxxx] >>> 进入 -[GraphViewController setView:] <<< 2013-04-22 16:42:03.589 xxxxxxxx[xxxxxxx] <<< 离开 -[ GraphViewController 设置视图:] >>>
` 我不确定我需要看什么来纠正这个问题。
任何朝着正确方向的“点”都将不胜感激。
谢谢
objective-c - 在 XCode 4.6.2 中,为什么在 UITextView 上创建插座会自动生成 viewDidUnload 方法
我在情节提要中制作了一个简单的“关于”视图。基本上它只有一个UITextView
. 它的控制器如下所示:
我想为 UITextView 添加一个插座,这样我就可以在代码中添加一些圆角。当我Ctrl
+ 从情节提要向上拖动@interface
and@end
并调用插座aboutBlurb时,我的AboutViewController.m
变为以下内容:
我的问题是,为什么 XCode 会插入viewDidUnload
方法并设置nil
我的aboutBlurb
属性?我认为使用 ARC,方法中nil
的属性viewDidUnload
是不必要的。此外,我认为 Apple 在 iOS 6 中完全弃用了该方法。自动生成该方法viewDidUnload
是否有合理的原因,或者我可以安全地删除它吗?viewDidUnload
objective-c - 在 ios 5.0 和 ios 6.0 中管理 View 插座
我正在开发一个转换为 ARC 的 iPad 应用程序。应用程序适用于 os >= ios 5.0。所以我的疑问是,我该如何管理 viewOutlets?我使用 -(void)didReceivememoryWarning 将 ViewOutlets 设置为 nil。但在 ios 5.0 和 5.1 应用程序中显示大量内存泄漏。由于 -(void)viewDidUnload 在 ios 6.0 中已弃用,因此我在应用程序中没有使用相同的。管理网点的方法正确吗?请给我一个快速的答复。
ios - 在基于 ARC 的 APP 中释放内存?
我使用了很多NSDictionaries
and NSArrays
,所以目前正在分配所有内容viewDidload
并使所有内容为零ViewDidDisappear
。
现在我的记忆力会下降对吗?
ios - iOS UIViewController,为什么viewDidUnload中的“self”变成了“wild pointer”?
我的代码片段:
在极少数情况下,我的应用程序崩溃了self.noDataView = nil;
。当我调试时po self
,似乎它指向的不是当前控制器。可能的原因是什么?
PS:self.tableView
's delegate
anddataSource
设置为self
ininit
方法。这和这个有关系吗?
ios - 从项目的视图控制器中删除所有 -viewDidUnload 的方法
正如苹果官方文档所说:
-viewDidUnload在 iOS 6.0 中已弃用。在低内存条件下不再清除视图,因此永远不会调用此方法。
同时,最好-viewDidUnload
从部署目标为 iOS 6.0 或更高版本的项目中删除所有实现。但是一个一个移除它很无聊,尤其是你有数百个控制器和几个项目。
那么,是否有任何脚本或命令可以执行此批处理作业?
swift - 为 NSNotificationCenter = Swift deinit() 调用 .removeObserver 的正确位置?
我已经阅读了很多关于为 NSNotificationCenter 调用 .removeObserver 的正确位置的建议,因为 viewDidUnload 不是一个选项。
我只是想知道 Swift 中的新 deinit() 是否是一个不错的选择?
-缺口
ios - MvvmCross 中的生命周期
我有一个 Mvvmcross 应用程序,它在根目录中有一个 TableViewController。每行打开一个 DetailViewController。在其中的每一个中,您都可以在 EditViewController 中对其进行编辑。
所以我为每个视图都有一个 ViewModel。我在这里处理两个问题:
1)在 DetailViewController 我订阅它到数据库消息。当我关闭它时,我必须处理这个 subscribeToken。所以当 DetailViewController 被破坏时,我需要调用它。但是当它消失时不能调用它,因为当我打开 editViewController 时,它会发送一条 DetailViewController 必须听的消息。
所以我不能在 ViewDidDisappear 方法中处理它。但另一个选项是在 ViewDidUnload 中。但是这个方法只在 MemoryWarnings 中调用。所以它没有处理令牌。这是不好的 。
2) 另一个问题是:对于我打开的每个 DetailsViewcontroller,我必须在设置中保存当前 ID。然后当我离开时,我必须将其从“设置”中删除。所以这里同样的问题。如果我在 ViewDidDisappear 中删除它,当我在 EditViewController 中时它会被删除,但我不能,它必须在那里设置。但是,如果我仅在 ViewDidUnload 中删除它将不会被调用,并且必须删除此变量。
我什么时候应该对这两种情况调用 OnDestroy 方法?
在 Android 中,我正在调用 OnDestroy。我应该在 iOS 哪里调用它?
感谢您的问候,