菜鸟教程小白 发表于 2022-12-12 16:05:15

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]
查看完整版本: ios - 关于 Object-C 中的类别 : Override existed message