0

最近、コードの .h 領域とインターフェイス領域にメソッドを配置することがある理由を知りたいと思っています。必ずしも必要ではないことを知っているので、私はただ尋ねています。

例えば:

.h

@interface ViewController : UIViewController

- (IBAction) methodOne:(id)sender;
- (BOOL) doesChickenTasteGood;

また:

.m

import "ViewController.h"

@interface ViewController ()
- (IBAction) methodOne:(id)sender;
- (BOOL) doesChickenTasteGood;

@end

@implementation ViewController

- (IBAction) methodOne:(id)sender {
      NSLog(@"Yay you poked me");
}

- (BOOL) doesChickenTasteGood {
      return YES;
}

@end

私は自分のメソッドのいくつかをこれらの領域に置くべきかどうか疑問に思っています。

編集:コードの .h 部分とインターフェイス部分の両方でこれらのメソッドを再宣言する理由を尋ねているわけではありません。なぜ誰かが .m ファイルの実装の外にメソッドを配置するのかを尋ねているだけです。

4

2 に答える 2

4

他のクラスから見えるようにしたい場合は、ヘッダーでメソッドを宣言します。実装ファイルでのみ宣言されたメソッドは、コンパイル時に他のクラスから見えないため、実質的に非公開です(Objective-C の動的ディスパッチ メカニズムにより引き続き呼び出すことができますが、少なくとも警告は表示されます)。

メソッドは@interface、使用前に存在を宣言する方法として、実装ファイルのブロックに配置されます。これにより、呼び出し元からのプライバシーを維持しながら、より整理されたコード (たとえば、@interfaceグラフィックス メソッドのみを含むブロック、または数学メソッドのみを含むブロック) が可能になります。

ヘッダーにメソッドがない場合、呼び出し元のコードは、クラスのインスタンスをどう処理するかわかりません。

于 2013-02-09T15:29:50.133 に答える
3

.h ファイルは、クラスのパブリック メソッドを構成します。他の人があなたのdoesChickenTasteGoodメソッドを呼び出せるようにしたい場合は、.h で宣言する必要があります。これは、他のクラスが行うことだからです#import

于 2013-02-09T15:29:01.903 に答える