super viewWillAppear:animated vs super viewWillAppear:YES

时间:2016-01-25 04:39:32

标签: super

这似乎是一个简单的问题,但我不确定

之间有什么区别
- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
}

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

有人可以解释一下吗?感谢。

1 个答案:

答案 0 :(得分:1)

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

从广义上讲,后者不是很好的编程习惯,因为调用者不能依赖他们的意图(特别是动画不是想要的情况)被尊重。

值得注意的是,如果您的子类是UIViewController的直接子类,则调用实际上是相同的,因为UIViewController的{​​{1}}方法不执行任何操作。

编辑:

我几乎不想添加这个,因为我说这是一个糟糕的编程习惯,但我已经看到了在开发人员的意图所说的一些情况下将viewWillAppear:传递给超类的语法,< em>“这个视图控制器应该只显示动画。”

但是,正如我所说,这是一个不好的做法,因为它打破了子类化。

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

YES

然后你会发现测试中的错误用法(你会立刻发现你有一个非动画的用例)。