删除或重新定位指针

时间:2012-05-12 20:39:43

标签: objective-c

我有一个模型类。当我调用方法“setter”时,我将一些String值设置为我的对象的属性。设置属性后,该方法返回存储在NSMutableArray *eintraegeSortiert

中的新Object

现在,我需要一个新的Object。我想我必须删除指针并再次设置它。如果我不删除指针,那么存储在可变数组中的所有对象也将改变,并且我在该可变数组中存储了相同的对象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]];
    }

2 个答案:

答案 0 :(得分: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-loop。这意味着变量vertretung超出了范围。

然后当你再次循环时,同样的代码会一次又一次地运行。但现在alloc / init将创建一个全新的Vertretung对象(可能指向内存位置0xabcdef00并将 添加到数组中。

所以不,它不是同一个对象被多次添加到数组中。

不确定setter::中发生了什么 - 如果您仍然遇到问题,也许也可以发布。

答案 1 :(得分: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;

}