1

私はオンラインのスタンフォードコースからオブジェクト指向のプログラミングを学んでいますが、宣言に関して確信が持てない部分があります。常にヘッダーでプロトタイプを宣言してから実装ファイルにコードを書く必要があると思いましたが、教授はヘッダーファイルにプロトタイプを宣言せずに実装でメソッドを書いたのですが、どうしてですか?

また、誰かがプライベートとパブリックの違いを明確にして、プロトタイプのない方法がパブリックかプライベートかを教えてください。プロトタイプのないメソッドは、スーパークラスのものではありません。

4

2 に答える 2

2

これは、クラス実装自体の外部で使用されないメソッドを宣言するための完全に合法的な方法です。

コンパイラは、メソッドが使用されているメソッドの前にある限り、実装ファイル内のメソッドを検索します。ただし、新しい LLVM コンパイラでは、メソッドを任意の順序で宣言し、特定のファイルから参照できるため、常にそうとは限りません。

実装ファイル内でメソッドを宣言するには、いくつかの異なるスタイルがあります。

//In the Header File, MyClass.h
@interface MyClass : NSObject
@end

//in the implementation file, MyClass.m
//Method Decls inside a Private Category
@interface MyClass (_Private)
    - (void)doSomething;
@end

//As a class extension (new to LLVM compiler)
@interface MyClass ()
    - (void)doSomething;
@end

@implementation MyClass
//You can also simply implement a method with no formal "forward" declaration
//in this case you must declare the method before you use it, unless you're using the
//latest LLVM Compiler (See the WWDC Session on Modern Objective C)
- (void)doSomething {
}

- (void)foo {
    [self doSomething];
}
@end
于 2012-06-20T07:33:31.510 に答える
2

メソッドをヘッダー ファイルに記述すると、そのメソッドは公開され、他のクラス / オブジェクトからアクセスできるようになります。ヘッダーファイルで宣言しない場合、メソッドはプライベートメソッドであり、クラス内で内部的にアクセスできますが、他のクラスはこのメソッドを使用できません。

于 2012-06-20T07:24:49.310 に答える