4

クラス変数を使いたい。次の2つのアプローチはうまく機能しますが、それらの違いはわかりません。

static NSString *str1 = @"str1";
NSString *const str2 = @"str2";
@implementation StrViewController
4

2 に答える 2

5

場所をポイントしている場所に変更できますが、constポインターであるstr1ため同じことはできませんstr2

これは動作します:

str1 = @"Hello";

これはしませんが:

str2 = @"Hello"; 
于 2012-10-10T08:38:04.237 に答える
1

static変数がまたはである必要はないことがわかると思いますconst。それをクラス変数にしているのは、それがメソッドや関数の外にあるということです。

名前にもかかわらず、static静的である(つまり同じままである)こととは何の関係もありません。これは非常に残念な用語の選択ですが、Cから来ており、私たちはそれに固執しています。変数staticスコープと関係があります。これは、ファイルの範囲内で、特定のメソッド/関数の外部で、ファイルのレベルで実装されます。これは2つの方法で使用されます。

  • メソッドまたは関数のstatic外部では、このファイルの外部からグローバル変数が表示されないようにします。別のクラスからの静的NSString*constの参照を参照してください。

  • メソッドまたは関数の内部では、メソッドstaticまたは関数が「自動」変数のように終了したときに変数が存在しなくなるのではなく、ストレージをファイル全体に結び付けます。Cの発明者自身が述べているように(K&R 4.6):

自動とは異なり、機能がアクティブになるたびに行き来するのではなく、存在を再確認します。これは、内部static変数が単一の関数内にプライベートで永続的なストレージを提供することを意味します。

そのためstatic、クラスで販売されたシングルトンの実装で使用されます。

于 2012-12-12T18:03:18.347 に答える