可以直接调用viewWillDisappear吗?

时间:2015-02-19 20:21:30

标签: ios viewcontroller

有没有人有官方参考,为什么不应该直接调用'viewWillDisappear'等方法?关于这个主题有几个现有的帖子,但没有官方链接,只有意见。

这样做是没有意义的,因为它从视图的生命周期管理中调用了一个“不在周期”的方法。当然,它们可以在很多情况下被覆盖。

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDisplay-Notifications/RespondingtoDisplay-Notifications.html

有问题的是我遇到的一些代码,其中'viewWillDisappear'是从某个方法调用的。它实际上是需要调用的'viewWillDisappear'方法的内容。

示例:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    // The following two methods are the ones that need to be called below
    [self someMethod];
    [self anotherMethod];
}

- (void)delegateMethod
{
    [self viewWillDisappear:YES];
    // Do some other work
    // View is moved off-screen, not deallocated, and therefore, does not "disappear"
}

本能地直接调用任何视图层次结构方法似乎是错误的(例如viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear)。如果你告诉'self'和'super'视图viewWillDis出现它可能会在框架中做一些可能在以后引起问题的事情。我认为这些方法只能由框架调用。但是,这是我的意见,而不是官方消息来源。头文件似乎没有提供任何相关信息。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

没有技术原因你不能。

但你不应该。

这是一种糟糕的编码习惯,你可能会使读者感到困惑,或者更糟糕的是,让他/她不信任你。

良好的编码实践如下:

- (void)delegateMethod
{
  [self doCommonWork];
}

- (void)viewWillDisappear:(BOOL)animated 
{
  [self doCommonWork];
}

- (void)doCommonWork 
{
  // …
}