超级 viewWillAppear:animated 与超级 viewWillAppear:YES

super viewWillAppear:animated vs super viewWillAppear:YES

好像是个简单的问题,但是不知道有什么区别

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
}

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:YES];
}

谁能解释一下?谢谢。

在前者中,您让调用者决定视图是否显示动画,在后者中您强制超类显示动画。

广泛地说,后者不是很好的编程实践,因为调用者不能依赖他们的意图(特别是动画 不是 想要的情况)被兑现。

可能值得注意的是,如果您的子类是 UIViewController 的直接子类,调用实际上是相同的,因为 UIViewControllerviewWillAppear: 方法什么都不做。

编辑:

我几乎不想添加这个,因为正如我所说,这是糟糕的编程习惯,但我已经看到在开发人员的意图是说的少数情况下将 YES 传递给超类的语法, "This view controller should only ever be shown animated."

但是,正如我所说,这是一种不好的做法,因为它会破坏子类化。

如果您按照这些思路思考,我认为更好的做法是使用断言或至少使用日志消息,例如:

- (void) viewWillAppear:(BOOL) animated {
    NSAssert(animated, @"This view controller should always be shown animated, but wasn't");
    [super viewWillAppear: animated];
}

然后你在测试中发现错误使用(你会立即发现你 do 有 non-animated use-case)。