0

私はモデルクラスを持っています。メソッド「セッター」を呼び出すと、いくつかの文字列値がオブジェクトの属性に設定されます。属性が設定されると、メソッドは に格納されている新しいオブジェクトを返しますNSMutableArray *eintraegeSortiert

さて、新しいオブジェクトが必要です。ポインターを削除して、再度設定する必要があると思います。ポインターを削除しないと、可変配列に格納されているすべてのオブジェクトも変更され、その可変配列に同じオブジェクトを 100 回格納しました。私はそれを正しくすることなく、複数の方法で試しました。私は何を間違っていますか?私のコード:

NSMutableArray *eintraegeSortiert = [NSMutableArray array];
for (int i = 0; i < ([mArray count] / 11) ; i++) {
        Vertretung *vertretung = [[Vertretung alloc] init];
        [eintraegeSortiert addObject:[self setter:mArray :vertretung]];
    }
4

2 に答える 2

1

あなたが書いたコードがどのように機能するかを本当に理解していないと思います。それを見てみましょう:

NSMutableArray *eintraegeSortiert = [NSMutableArray array];
for (int i = 0; i < ([mArray count] / 11) ; i++) {
    Vertretung *vertretung = [[Vertretung alloc] init];
    [eintraegeSortiert addObject:[self setter:mArray :vertretung]];
}

だからステップバイステップ:

NSMutableArray *eintraegeSortiert = [NSMutableArray array];

新しい可変配列を作成し、に割り当てますeintraegeSortiert

for (int i = 0; i < ([mArray count] / 11) ; i++) {

時間をループします[mArray count] / 11

Vertretung *vertretung = [[Vertretung alloc] init];
[eintraegeSortiert addObject:[self setter:mArray :vertretung]];

これで、現在のスコープ内にと呼ばれる変数が作成されvertretungます。alloc/を呼び出しますinit。これにより、新しいVertretungオブジェクトへのポインタが返されます。たとえば、これはメモリ位置にある可能性があります0x12345678。次に、それを配列に追加します。

次に、現在のスコープの最後に到達し、forループをループバックします。これは、変数vertretungがスコープ外になることを意味します。

次に、ループを繰り返すと、同じコードが何度も実行されます。しかし今、alloc/initは完全に新しいVertretungオブジェクトを作成します(おそらくメモリの場所を指し、それを配列に0xabcdef00追加します。

つまり、同じオブジェクトが配列に複数回追加されるわけではありません。

何が起こっているのかわからないsetter::-まだ問題が解決しない場合は、それも投稿してください。

于 2012-05-12T21:08:38.467 に答える
0
NSMutableArray *eintraegeSortiert = [NSMutableArray array];
 for (int i = 0; i < ([mArray count] / 11) ; i++) {
       Vertretung *vertretung = [[Vertretung alloc] init];
       [eintraegeSortiert addObject:[self setter:mArray :vertretung]];
       [vertretung release];
       vertretung=nil;

}
于 2012-05-12T21:00:39.890 に答える