4

私は Objective-C を初めて使用するので、MyClass.h の変数 (firstString、secondString、および thirdString) の宣言の違いを理解できません。

@interface MyClass {
    NSString *firstString;
}
@end

MyClass.m で:

@interface MyClass() {
    NSString *secondString;
}
@end

@implementation MyClass

NSString *thirdString;

@end

1番目と2番目のケースは同じものだと思いますが、どちらの場合に使うのが良いでしょうか?

どうもありがとう!

4

3 に答える 3

3

firstString#importヘッダーで宣言され、他のクラスによって編集されるファイルです。これは他のクラスに公開されているため、サブクラスからアクセスできます。シンボルはヘッダー ファイルで使用できるため、外部オブジェクトがキーと値のコーディングによって簡単に変更できます。

secondString実装ファイルで宣言されています。()in@interface MyClass ()は、これがクラス拡張であることを示します。secondString外部クラスには公開されません (ただし、Objective-C のすべての場合と同様に、それを真にプライベートと見なすことはできません)。

于 2013-02-17T14:57:48.003 に答える
2

1 番目と 2 番目の変数はインスタンス変数になり、3 番目の変数はファイル スコープのグローバル変数になります。通常、インスタンス変数を使用し、グローバル変数は使用しないでください。

于 2013-02-17T14:53:57.627 に答える
1

3 つの機能に違いはありません。主に可視性の制御です。

  1. 最初のものはクラスの public ヘッダーで宣言されています。つまり、プログラマーに変数について知ってもらいたいということです。このプロパティへのアクセスが制限されている場合 (例: @private)、パブリック ヘッダーに表示されなくなり、2 番目または 4 番目のオプションを使用する必要があります。

  2. 2 番目は、クラスの継続で宣言されます。つまり、実装でのみ必要になります。

  3. 3 つ目はグローバル変数で、例外的な場合にのみ使用する必要があります。

  4. 別のオプションがありません

@implementation MyClass {
    NSString *thirdString; 
}

@end

(最新の Apple コンパイラで許可されています) は 2 と同じですが、クラスの継続を作成する必要はありません。

于 2013-02-17T14:59:02.423 に答える