我一直认为打电话给[super viewWillAppear:animated]
是强制性的。但是今天我遇到了一段来自Apple示例应用程序的代码,名为CoreDataBooks
,这是从那里实现viewWillAppear:
:
- (void)viewWillAppear
{
[self.tableView reloadData];
}
请注意,没有调用超级。这让我很困惑。如果即使Apple的代码也不包括对[super viewWillAppear:]
的调用,那么也许我总是可以省略它?或者也许对这件事有一定的规则?谁能解释一下?
即使不调用super
实现有时可能是无害的,但您应该始终调用[super viewWillAppear:]
,无论Apple发布的不良示例如何。不这样做可能会导致非常讨厌的问题需要追踪。
根据文档
如果重写此方法,则必须在实现中的某个时刻调用 super。
你提到的具体例子以一种更微妙的方式被打破了:他们实现了viewWillAppear
而不是viewWillAppear:
,所以那段代码甚至没有被执行!
简而言之:总是。
如果不这样做,可能会导致难以跟踪的问题