2011-06-23 6 views
0

は、私は少しセッターとゲッター持つ変数静的(クラスレベル)を有することにより、目的のCの法律に違反しようとしている:これはクラスレベルのメンバ変数を持つ良い方法ですか?

+(CGRect*)defaultOpFr:(CGRect*)set{ 
    static CGRect * defaultOpFr = nil; 

    if (set) { 
     if (!defaultOpFr) { 
      defaultOpFr = malloc(sizeof(defaultOpFr)); 
     } 
     defaultOpFr->size.width = set->size.width; 
     defaultOpFr->size.height = set->size.height; 
     defaultOpFr->origin.x = set->origin.x; 
     defaultOpFr->origin.y = set->origin.y; 
    } 
    return defaultOpFr; 
} 
動作するように思わ

を、より良いあります場合、私は思ったんだけど方法。新しい値を設定するために、値を取得するためにそれをnilでコールし、CGRectでコールします。

+0

Objective-Cには「メンバー」変数はありません。 – bbum

答えて

2

それはうまくいくが、どんな種類の共通パターンにも完全に反対する。

あなたは単に標準的なセッター/ゲッターペアを持っていませんか?クラスレベルでさえ、それは大丈夫です:

static CGRect barf; 
+ (CGRect) barf { return barf; } 
+ (void) setBarf:(CGRect)aRect { barf = aRect; } 

完了しました。

+0

さらに、適切な命名規則に従うことによって、技術的に 'CGRect r = MyClass.barf;'と 'MyClass.barf = r;'を行うことができます。あなたは* should *(ドットシンタックスは角括弧などの美しい海を汚す忌み嫌いだからです)しかし、あなたはそうすることはできませんが... –

+0

Yup;いくつかのコンパイラは、Class受信機を使ってドット式をコンパイルするときに、ちょっとした神経質になるでしょう... – bbum

+0

関数の外側で 'static CGRect barf;'を宣言することはできません。メンバ変数関数宣言のすぐ隣にあります。両方の関数のスコープ内にある静的変数を取得するにはどうすればよいですか?私はあなたのことが好きですが、私はそれを機能させることはできません。 –

関連する問題