我有一个模型类。当我调用方法“setter”时,我将一些String值设置为我的对象的属性。设置属性后,该方法返回存储在NSMutableArray *eintraegeSortiert
。
现在,我需要一个新的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]];
}
答案 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;
}