2009-08-14 13 views
0

私は疑問を持っていた...私はObjective-Cコードの説明?

employees a; 

ラインは何をするのか、彼はMyDocument.mファイルに

を書き込んでいるココアマックOSXのためのプログラミングおよび第8章パート1を、読んでいます?

employees = [[NSMutableArray alloc] init]; 

は、従業員が可変配列であることを意味し、上記のですが、私は

employees a; 

が何をするかわかりません。

私はちょっと推測していますが、引数aが従業員の内容と同じであるかどうかを確認するコードのようです。そうであれば、機能を終了します。それ以外の場合は、従業員の割り当てを解除し、従業員をaと同等に設定します。

事前にお世話になりました!

答えて

5

私はあなたが第3版の127ページを見ていると思います。 init関数で

は、従業員のアレイが初期化される:

employees = [[NSMutableArray alloc] init]; 

これは可変配列を作成し、それを指すように、従業員が可変設定します。

私はあなたがして、アクセサ機能について尋ねていると思う:

-(void)setEmployees:(NSMutableArray *)a 
{ 
    if (a == employees) 
     return; 

    [a retain]; 
    [employees release]; 
    employees = a; 
} 

これは、あなたがKVCの方法で、従業員の配列を変更するたびに、その後に呼び出される関数です。これは、渡されたNSMutable配列がすでに作成されているため、初期化コードとは異なります。

まず、現在のemployees配列と同じ配列であるかどうかをチェックします。変更が必要な場合は、関数が戻ります。

次に、渡された配列が保持され、既存の配列が解放されます。その後、employees配列は新しい配列aを指すように設定されます。新しい配列に設定する前に、現在の従業員の配列を解放して、メモリをリークさせないようにすることが重要です。

これが役に立ちます。

2

間違っているようです。 Objective-Cには、このように割り当てられたオブジェクトの概念がないので、ポインタとallocですべてを行う必要があります。それは次のようになります。

NSMutableArray *employees; // don't forget the * 
employees = [[NSMutableArray alloc] init]; // allocation + constructor call 

しかし本はNSMutableArrayのへのポインタとして従業員を定義している場合、それが正しいことができます:

typedef NSMutableArray *employees; 
employees a; 
a = [[NSMutableArray alloc] init]; // it's "a", not "employees" here 

ライン「の従業員。」 typedefで正しいことができますが、次の行は両方の場合で間違っています。タイプに値を割り当てることはできません。

+0

私の悪い、それは実際に従業員=。 – hahuang65

+0

@ hahuang65 - これを反映するために質問を編集することができます。 – Abizern