Iphone 在不导致内存泄漏的情况下更改nsmutable数组的值

Iphone 在不导致内存泄漏的情况下更改nsmutable数组的值,iphone,memory-leaks,nsmutablearray,Iphone,Memory Leaks,Nsmutablearray,我有一个NSMutableArray,其中包含添加到scrollview的UIImageView对象 [self.scrollView addSubview:UIImageView]; [self.array addObject:UIImageView]; 我想在单击按钮后删除这些对象并添加新对象。我试图通过在阵列上调用removeAllObjects:来实现这一点,但它导致了崩溃 for(int i=0;i<[self.array count];i++){ [[self.arr

我有一个
NSMutableArray
,其中包含添加到scrollview的
UIImageView
对象

[self.scrollView addSubview:UIImageView];
[self.array addObject:UIImageView];
我想在单击按钮后删除这些对象并添加新对象。我试图通过在阵列上调用
removeAllObjects:
来实现这一点,但它导致了崩溃

for(int i=0;i<[self.array count];i++){
    [[self.array objectAtIndex:i] removeFromSuperview];
}
[self.array removeAllObjects];

for(inti=0;iHi)请执行以下代码-

UIScrollView *scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 300, 400)];
[self.view addSubview:scrollView];

array=[[NSMutableArray alloc]init];

UIImageView *img1=[[UIImageView alloc]initWithFrame:CGRectMake(20, 0, 100, 100)];
UIImageView *img2=[[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 100, 100)];
UIImageView *img3=[[UIImageView alloc]initWithFrame:CGRectMake(20, 200, 100, 100)];

[img1 setImage:[UIImage imageNamed:@"images.png"]];
[img2 setImage:[UIImage imageNamed:@"images.png"]];
[img3 setImage:[UIImage imageNamed:@"images.png"]];

[array addObject:img1];
[array addObject:img2];
[array addObject:img3];

for(int i=0;i<[array count];i++)    
    [scrollView addSubview:[array objectAtIndex:i]];
UIScrollView*scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0300400)];
[self.view addSubview:scrollView];
array=[[NSMutableArray alloc]init];
UIImageView*img1=[[UIImageView alloc]initWithFrame:CGRectMake(20,0,100,100)];
UIImageView*img2=[[UIImageView alloc]initWithFrame:CGRectMake(20100100100)];
UIImageView*img3=[[UIImageView alloc]initWithFrame:CGRectMake(20,200,100,100)];
[img1 setImage:[UIImage IMAGENAME:@“images.png”];
[img2 setImage:[UIImage IMAGENAME:@“images.png”];
[img3 setImage:[UIImage IMAGENAME:@“images.png”];
[数组addObject:img1];
[数组addObject:img2];
[数组addObject:img3];

对于(int i=0;i请发布您正在使用的代码。我假设addSubView:UIImageView与此不完全相同,您使用的是UIImageView的实例?您认为哪里有泄漏?此代码与您所展示的代码完全相同。错误一定在代码的其他地方。您需要发布更多周围的代码,以便我们可以第二个问题。可能是您正在双重释放项目,或者您意外地将数组初始化为不可变数组而不是可变数组。您的代码中是否有黄色警告?@JamesWebster是的,我使用的是UIImageView实例。为了让查看者了解我使用了UIImageView。我觉得泄漏很严重removeallobjects中没有。当我将removeallobjects用于数组时,它会崩溃,但同时我有另一个具有相同行为的可变数组,可以在其上应用removeallobjects。我没有确切了解问题所在。这不会起作用,因为在循环数组时正在修改数组。如果删除该数组,则ems在数组中单步执行时,数组会变短,因此当您到达数组末尾时,您正试图删除数组末尾的项。请向后计算数组,或者每次删除第0项。@NickLockwood如果我删除了removeallobjects代码,则程序工作正常。我正在初始化数组并在viewdidload方法中调用的一个函数中向其添加对象。如果需要任何特定数据,请答复。我尝试使用removeObjectAtIndex,并给出了条件[array count]>=0,但发现程序在删除第二个对象时崩溃。@Dipak Chaudhari Nick说的是真的,从视图中删除的代码不起作用,因为在删除数组中的所有对象之前,在某个点上i值会大于数组计数。但我想条件更改可能会起作用。如果我们使用[array count]>=0。但这对我来说不起作用。@NickLockwood请查看我初始化数组NSMutableArray*array_temp=[[NSMutableArray alloc]init];self.array=array_temp;[array_temp release];array_temp=nil;
 for(int i=0;i<[array count];i++){    
    [[array objectAtIndex:i] removeFromSuperview];    
    [array removeObjectAtIndex:i];
}