2012-01-06 34 views
-5
self.list = playList; 

- (id)init { 
    if (self = [super init]) { 
     [self createDemoData]; 
    } 
    return self; 
} 

static NSString *CellIdentifier = @"CellIdentifier"; 

こんにちは、これらの2つのキーワード、特に静的なキーワードをいつ使用するかはわかりませんでした。静的変数と自己キーワードを使用する場合

+2

Googleにお試しくださいましたか?私はそれがかなり効果的だと聞いたことがあります。 – Emil

+3

あなたは広範なトピックである2つのことについて非常に曖昧な質問をしたので、あなたは下降投票されています。このような自由な質問に答えるだけの方法はありません。あなたの質問を編集し、あなたの質問が何であるかをさらに明確にすると、より良い助けを得ることができます。理解しづらかっている自己と静的(本当にお互いに関係していない...)については何ですか? –

答えて

4

ただ、正しい方向を指すように:

静的https://stackoverflow.com/a/1250088/267892

問題説明

  1. あなたのにClassAはClassBのクラス変数を持っていると思います。
  2. Objective-Cをプログラミング言語として使用しています。
  3. Objective-CはC++のようにクラス変数をサポートしていません。

一つの代替

のObjective-Cを使用して、クラス変数の挙動をシミュレートするには、それがためにのみアクセスできるようになりますので

  1. 宣言/ classA.m内の静的変数を定義していますclassAメソッド(そしてclassA.mの中に を入れたもの)。

  2. NSObject initializeクラスメソッドを上書きして、静的変数をClassBのインスタンスで一度だけ初期化します。

  3. あなたはNSObjectのinitializeメソッドを上書きする必要があるのでしょうか。このメソッドに関するAppleのドキュメントには、 という回答があります。「ランタイムは、プログラムの各クラスに の直前に正確に1回、または を継承するクラスをプログラム内から最初に送信します。したがって、クラスが使用されていない場合は、 メソッドを呼び出すことはできません。

  4. 任意のClassAクラス/インスタンスメソッド内で静的変数を自由に使用できます。

セルフ:自己を使用してhttps://stackoverflow.com/a/2386015/267892

は、呼び出されるこの変数のためのあなたのクラスの "セッター" が発生 直接ではなくIVARを変更します。

self.mainViewController = aController; 

と等価である:一方

[self setMainViewController:aController]; 

mainViewController = aController; 

だけ が に組み込まれている可能性のある追加のコードをスキップし、直接mainViewControllerインスタンス変数を変更しますUIApplicationのsetMainViewControllerメソッド(古い オブジェクトを解放する、新しいものを保持する、updなど)内部変数などを含む。

+0

また、インスタンス変数をプライベート宣言し、.h readonlyでプロパティを定義すると、インスタンス変数を保護することができます。実装では、プロパティを読み書きと定義します。アンダースコア_Exampleでインスタンス変数を作成し、アンダースコア以外のプロパティ@synthesize Example = _Exampleで合成すると、さらに保護が可能です。あなたのクラスを使用する人は、あなたのカスタムセッターとカスタムゲッターを通過しなければならず、これは多くの保護を提供します。カプセル化の方法はいくつかあります。実装でインスタンスを宣言するのと同じです。 –

関連する問題