0

我有一个模型类。当我调用方法“setter”时,我为对象的属性设置了一些字符串值。设置属性后,该方法返回存储在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 回答