5

次の違いは何ですか:

@interface SomeClass : NSObject {
    NSObject *something;
}

@interface SomeClass : NSObject {

}
NSObject *something;

? また、Java のfinalと Objective C (C) のconstの違いは何ですか? また、次のような状況では、どこで静的クラス メンバーを宣言する必要がありますか? #define については既に知っていますが、毎回新しいオブジェクトが作成されるため、オブジェクトには適していません。ありがとう!

4

2 に答える 2

7

前者はインスタンス変数でsomething、SomeClass のインスタンスごとに を作成します。Cに似てる

typedef struct {
    NSObject *something;
} SomeClass;

後者は、SomeClass と実際には関連付けられていないグローバル変数を宣言します。Cでは、次と同等です

NSObject *something;

グローバル スコープで定義されます。Objective-C には実際にはクラス変数がないため、グローバル変数が使用されます (むしろ、時々使用されます。コンパイル ユニットスコープと静的ストレージ クラスを持つ変数を使用する必要があります)。

「クラス」変数を​​定義する最もクリーンな方法は、実装ファイルで静的変数を定義することです。そうすれば、クラス メソッドのみがアクセスでき、グローバル名前空間の汚染を回避できます。公開する場合は、アクセサーを定義します。

クラス変数を適切に破棄するのは難しい場合があります。アプリケーションが終了すると、メモリは再利用され、開いているファイルは自動的に閉じられますが、他のリソースはうまく処理されない場合があります。

于 2009-09-05T17:42:09.933 に答える
2

「final vs const」の質問に関しては、どちらも似ています。彼らは、値が変更できないと述べています。Java では、すべての値 (プリミティブを除く) がポインターであるため、それが指しているオブジェクトはその下で変更される可能性がありますが、メモリの場所 (ポインター) は決して変更されないことに注意してください。Objective C でも同様の動作が期待されると思いますが、変更可能な要素を「final」または「const」にしないことを常にお勧めします。これは、オブジェクト内の値を変更できるからです。

于 2009-09-05T17:05:10.293 に答える