我什么时候应该调用[super viewWillAppear:]而什么时候不调用?

And*_*kha 9 cocoa-touch objective-c uiviewcontroller viewwillappear ios

我一直认为打电话[super viewWillAppear:animated]是强制性的.但是今天我从Apple的示例应用程序中看到了一段代码CoreDataBooks,这里的代码来自viewWillAppear:于:

- (void)viewWillAppear
{
   [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

请注意,没有超级电话.这让我很困惑.如果连Apple的代码都没有包含调用[super viewWillAppear:]那么也许我总能省略它?或者也许有关于这个问题的某些规则?任何人都可以解释一下吗?

Gab*_*lla 14

尽管没有调用super实现可以是无害的,有时,你应该总是调用[super viewWillAppear:],不管坏榜样苹果发布.不这样做可能会导致非常讨厌的问题.

根据文件

如果重写此方法,则必须在实现中的某个时刻调用super.

您提到的具体示例以更微妙的方式被破坏:它们实现viewWillAppear而不是viewWillAppear:,因此甚至没有执行代码片段!

  • @LeszekŻarna,如果你在你的项目中打开__Static Analyzer__,如果你忘了调用它就会遇到问题:)(例如'UIViewController子类中的'viewDidAppear:'实例方法'MyViewController'缺少一个[super viewDidAppear:] call`) (3认同)

Dai*_*jan 5

简而言之:永远.

如果不这样做会导致难以跟踪的问题