Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSMutableArray removeAllObjects将删除后的内容替换为其他项_Iphone_Arrays_Ios5_Nsmutablearray - Fatal编程技术网

Iphone NSMutableArray removeAllObjects将删除后的内容替换为其他项

Iphone NSMutableArray removeAllObjects将删除后的内容替换为其他项,iphone,arrays,ios5,nsmutablearray,Iphone,Arrays,Ios5,Nsmutablearray,对不起,如果标题用词很奇怪,我不知道该怎么说。我正在将JSON中的一个对象数组的内容添加到另一个数组中,因此我可以使用分段的UITableView。但是,当我为第一部分填充了足够的内容,然后执行removeAllObjects函数调用时,将它们添加到数组中,然后开始加载第二部分,结果是整个第一部分被第二部分替换。是NSMutableArray的错,还是我没有想到的 weekScheduleArray = [[NSMutableArray alloc] initWithCapacity:2

对不起,如果标题用词很奇怪,我不知道该怎么说。我正在将JSON中的一个对象数组的内容添加到另一个数组中,因此我可以使用分段的UITableView。但是,当我为第一部分填充了足够的内容,然后执行
removeAllObjects
函数调用时,将它们添加到数组中,然后开始加载第二部分,结果是整个第一部分被第二部分替换。是NSMutableArray的错,还是我没有想到的

    weekScheduleArray = [[NSMutableArray alloc] initWithCapacity:2];
    NSMutableArray *temp = [[NSMutableArray alloc] init];
    for (int count = 0; count < [jsonObject count]; count++) {
        if (count < 7) {
            [temp addObject:[jsonObject objectAtIndex:count]];
        } else if (count == 7) {
            [weekScheduleArray addObject:temp];
            [temp removeAllObjects];
            [temp addObject:[jsonObject objectAtIndex:count]];
        } else {
            [temp addObject:[jsonObject objectAtIndex:count]];
        }
    }
    [weekScheduleArray addObject:temp];
weekScheduleArray=[[NSMutableArray alloc]initWithCapacity:2];
NSMutableArray*temp=[[NSMutableArray alloc]init];
对于(int count=0;count<[jsonObject count];count++){
如果(计数<7){
[临时添加对象:[jsonObject对象索引:计数]];
}否则如果(计数=7){
[weekScheduleArray addObject:temp];
[临时删除所有对象];
[临时添加对象:[jsonObject对象索引:计数]];
}否则{
[临时添加对象:[jsonObject对象索引:计数]];
}
}
[weekScheduleArray addObject:temp];

调用
[weekScheduleArray addObject:temp]
不会将
temp
的副本添加到
weekScheduleArray
;它添加了数组本身。因此,当您随后从
temp
移除allobjects
时,
weekScheduleArray
中的数组也为空。您可以通过以下方法避免此问题:

[weekScheduleArray addObject: [temp copy]];

问题是您正在继续操作刚刚添加到weekScheduleArray的完全相同的可变数组。有很多方法可以解决这个问题。将副本添加到weekScheduleArray时,可以创建副本:

[weekScheduleArray addObject:[temp copy]];
或者你可以这样做:

[weekScheduleArray addObject:temp];
[temp release];
temp = [[NSMutableArray alloc] init];
[temp addObject:[jsonObject objectAtIndex:count]];

然后,当您完成for循环时,请记住释放temp。

如果您在ARC之外工作,这可能是正确的,但要降低内存消耗(即使是一个alloc),这并不好。嗯,两个选项都消耗相同的内存量。无论使用copy还是alloc,都将创建第二个数组。这是绝对正确的,而不是多少正确。你说如果在弧外,它将是“一些正确的东西”。如果是外弧,则完全正确。您的问题没有指定弧。你应该明白,当你调用copy时,它正在为你做一个alloc,所以内存消耗注释是不正确的。我本来打算修改它,但是我不能修改过去的注释,除非我只是添加了它。没必要这么防御性。正确,我没有指定ARC支持,下次我会记住这一点。