超级 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
的直接子类,调用实际上是相同的,因为 UIViewController
的 viewWillAppear:
方法什么都不做。
编辑:
我几乎不想添加这个,因为正如我所说,这是糟糕的编程习惯,但我已经看到在开发人员的意图是说的少数情况下将 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)。
好像是个简单的问题,但是不知道有什么区别
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
和
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
}
谁能解释一下?谢谢。
在前者中,您让调用者决定视图是否显示动画,在后者中您强制超类显示动画。
广泛地说,后者不是很好的编程实践,因为调用者不能依赖他们的意图(特别是动画 不是 想要的情况)被兑现。
可能值得注意的是,如果您的子类是 UIViewController
的直接子类,调用实际上是相同的,因为 UIViewController
的 viewWillAppear:
方法什么都不做。
编辑:
我几乎不想添加这个,因为正如我所说,这是糟糕的编程习惯,但我已经看到在开发人员的意图是说的少数情况下将 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)。