15

Objective C で、何かをサブクラス化し、スーパークラスのメソッドをオーバーライドする予定がある場合、サブクラス @interface でスーパークラス メソッドを再宣言する必要がありますか?

たとえば、UIViewController (MyViewController など) をサブクラス化していて、"viewDidLoad" をオーバーライドする予定がある場合、そのメソッドを MyViewController @interface 宣言に含めるか、単に MyViewController.m に実装する必要がありますか?

私が遭遇した例では、それが両方の方法で行われているのを見てきました (サブクラス インターフェイスでメソッドを再宣言するか、メソッドを再宣言しない)。機能的な違いはないかもしれませんが、ベスト プラクティスは何ですか?

4

2 に答える 2

26

パブリック ヘッダーまたは少なくともプライベート カテゴリで、オーバーライドする予定のメソッドを宣言することがよくあります。これの利点は、メソッドを実際にオーバーライドするのを忘れた場合に、不完全なクラス定義の警告が表示されることです...これは時々便利です。

いつ公開ヘッダーに配置するかについては、かなり主観的であり、おそらくあなた/あなたのチームのコーディング スタイル次第です。通常、メソッドの動作を根本的に変更する予定がある場合、またはメソッドのスーパー クラスのバージョンを呼び出さない予定がある場合にのみ、パブリック ヘッダーでメソッドを再宣言します。

于 2009-04-21T00:55:57.377 に答える
5

多くの場合、ヘッダーはクラスのドキュメントとして使用されます (AutoDoc などのツールはこれをサポートしています)。明らかに、その規則に従っている場合、唯一の賢明な選択は、再定義されたメソッドを含めて、それらで何をしたかを説明できるようにすることです。そうしないと、クラスのドキュメントが不完全であるか、地球の四隅に散らばっています。

しかし、宣言をコピーして貼り付けるだけの場合、私は個人的にメソッドを再宣言するのは好きではありません。DRYではなく、不必要にヘッダーを肥大化させます。より少ないコードはより良いコードです。

于 2009-04-21T01:25:20.830 に答える