ios - 关于 Object-C 中的类别 : Override existed message
<p><p>类别是子类的替代。如果类别消息已经在类中实现,会发生什么。以 UIViewController 为例,</p>
<pre><code>@implementation UIViewController (Landscape)
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
@end
</code></pre>
<p>那么,如果我们得到任何扩展 UIViewController 的 XXViewController,是否会像上面那样实现默认消息?</p>
<pre><code>- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
</code></pre>
<p>如你所见,我的目标是让所有 XXViewController 都支持横向,所以使用类别来达到这个目的。 </p>
<p>实际上传统的策略会使用子类,并且有效。分类方式怎么样?</p>
<p>谢谢</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>类别确实可以覆盖方法;你的代码片段是完全合法的,应该做你想做的事。</p>
<p>但是,您必须小心,因为如果 2 个类别覆盖相同的方法,您将得到未定义的结果。此外,如果将来您希望某些 ViewController 是纵向的,那么类别可能是一个不好的选择。</p>
<p>子类化可能是最好的选择。</p></p>
<p style="font-size: 20px;">关于ios - 关于 Object-C 中的类别 : Override existed message,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/5270411/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/5270411/
</a>
</p>
页:
[1]