【问题标题】:view will disappear is not firing视图会消失不是射击
【发布时间】:2011-09-02 05:56:13
【问题描述】:

我正在使用 addSubView 方法添加视图。 viewWillDisappear 是否有任何替代方法? viewWillDisappear 没有触发。我想在当前视图消失时释放所有分配的对象。目前我正在使用 dealloc 方法来做到这一点。但是 dealloc 方法不会很快触发。由于我收到内存警告,有时我的应用程序可能会自行崩溃。主要问题是语音文件。

【问题讨论】:

  • 您认为 viewWillDisappear 应该在哪里调用,为什么?您是通过导航控制器、标签栏控制器、以模态方式呈现另一个视图控制器还是做其他事情来远离视图控制器?

标签: iphone audio viewwillappear


【解决方案1】:

addSubview/removeFromSuperview(这些方法与视图相关,而不是视图控制器)不调用 viewWillAppear/viewWillDisappear 方法。您应该在 dealloc() 本身中编写发布目标代码。
removeFromSuperview 应该调用 dealloc()。

【讨论】:

  • 通过在视图动画开始时手动将此消息发送到 VC 自行修复。代码:[myViewController viewWillAppear:YES];
【解决方案2】:

你可以尝试release方法viewDidDisappear中的对象。那你就不用等待触发方法dealloc了。

同样在viewDidDisappear 方法中,您可以尝试从父视图中删除所有子视图(这会将viewWillDisappear 调用到所有子视图):

NSArray *subviews = [self.view subviews];
for (UIView *view in subviews)
    [view removeFromSuperview];

【讨论】:

  • 由于我使用 addSubView viewDidDisappear,viewWillDisappear 将无法正常工作。我使用代码做到了这一点:[myViewController viewWillAppear:YES];
【解决方案3】:

在 viewDidUnload/viewDidDisappear 中释放对象并在 dealloc 中设置为 nil

这可能有效,但您一定要看看为什么 viewWillDisappear 没有被调用。

【讨论】:

  • 释放你设置为 nil 的“对象”是没有意义的,因为它们不是对象,它们是指向 nil 的指针,你不能释放 nil。
猜你喜欢
  • 2014-01-30
  • 2014-07-08
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
相关资源
最近更新 更多