2012-02-01 34 views
0

静的変数は、コンパイル時に静的に割り当てられる変数です。私の疑念は、いくつかの変数がどのような目的のために静的に宣言されているのでしょうか?私は今まで私のコードで静的変数を使用していませんでした。 securityWrapper.mリンゴコードhttp://developer.apple.com/library/ios/#samplecode/CryptoExercise/Introduction/Intro.html からは、ラインがあるObjectiveCの静的変数

static SecKeyWrapper * __sharedKeyWrapper = nil; 

静的ここ__sharedKeyWrapper割り当てを使用することは何ですか?

私は非常に多くのコードで静的キーワードの使用を見てきました。だから親切に静的キーワードの使用と利点を説明します。

ありがとうございます。

答えて

1

そのファイルのグローバルはsingletonで、クラスのインスタンスの共有に使用されます。

Objective-Cで静的な理由はinternal linkageです。実際には、これは変数が宣言されているファイルの外側に見えないことを意味します。同じ名前の変数を宣言したファイルは、2つの異なる変数です。

Objective-Cインスタンスの動作は、インスタンスが実際に自動的に割り当てられるわけではないことに注意してください。むしろ、インスタンスへのポインタがあります。コードはまだ以下のようなことをしなければなりません:

if (!_sharedKeyWrapper) { 
    _sharedKeyWrapper = [[SecKeyWraper alloc] initBlahBlah]; 
} 

もっとリンクを見る

1

オブジェクトの新しいクラスを定義するときに、オブジェクトにどのようなインスタンス変数を含めるかを決めることができます。クラスのすべてのインスタンスは、宣言したすべての変数の 独自のコピーを持ちます。各オブジェクトは独自の データを制御します。

ただし、クラスオブジェクトの変数を指定することはできません。 インスタンス変数に対応する「クラス変数」はありません。クラス定義から初期化された内部構造 のみがクラス に提供されます。クラスオブジェクトには、インスタンスのインスタンス変数 へのアクセスもありません。それらを初期化、読み込み、または変更することはできません。

したがって、クラスのすべてのインスタンスがデータを共有するためには、ある種の外部変数 が必要です。いくつかのクラスは静的変数 を宣言し、それらを管理するクラスメソッドを提供します。 (変数staticを宣言すると、クラス定義と同じファイル内にある のスコープは、 クラスだけでなく、ファイルに実装されているクラスの一部に限定されます。 静的変数はインスタンス変数とは異なり継承できません。 サブクラス)

スタティック変数は、インスタンスを生成する "ファクトリ"のものよりも、クラスオブジェクトに多くの機能を提供します。 それはそれ自身の権利の 完全で多目的なオブジェクトであることに近づくことができます。クラスオブジェクトは、作成したインスタンスを調整するために を使用したり、すでに作成されたオブジェクトのリストを からディスペンスしたり、アプリケーションに不可欠な他のプロセスを管理したりすることができます。 特定のクラスのオブジェクトが1つだけ必要な場合は、すべてのオブジェクトの状態を静的変数 に設定し、クラスメソッドのみを使用できます。これにより、 を割り当ててインスタンスを初期化するステップが節約されます。

0

静的変数も一度初期化されます。再帰呼び出しでは静的変数を使用できます。簡単な例Factorial。