2012-01-13 12 views
0

NSMutableArrayには、スクロールビューに追加されるオブジェクトが含まれています(UIImageView)。メモリリークを発生させずにnsmutable配列の値を変更する

[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]; 
+0

あなたがしてください使用しているコードを投稿してください。 –

+0

私はaddSubViewを想定しています:UIImageViewはまったくそうではなく、代わりにUIImageViewのインスタンスを使用していますか?あなたはどこに漏れがあると思いますか? –

+0

このコードはあなたがそれを提示したようにうまくいきます。バグはコード内の他の場所になければなりません。私たちが問題を見つけるためには、周囲のコードをもっと投稿する必要があります。項目を二重に解放しているかもしれません。あるいは、誤って配列を変更可能な配列ではなく不変の配列として初期設定したことがあります。あなたのコードに黄色い警告がありますか? –

答えて

0

こんにちは)を削除するために、すべてのビューとbuttonTouchUpInside(上の空の配列次のコードをコード -

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]]; 

を次のように行ってください -

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

アレイをループする際に配列を変更しているため、これは機能しません。ステップスルー中に配列内の項目を削除すると、配列の長さが短くなります。最後になると、配列の最後から項目を削除しようとしています。配列を逆方向に数えるか、毎回0番目の項目を削除します。 –

+0

@NickLockwood removeallobjectsコードを削除した場合、プログラムは正常に動作しています。私は配列を初期化して、オブジェクトをviewdidloadメソッドで呼び出される1つの関数で追加しています。特定のデータが必要な場合は、返信してください。私はremoveObjectAtIndexを使用してみましたが、条件[配列数]> = 0を指定しましたが、プログラムが2番目のオブジェクトの削除時にクラッシュすることが判明しました。 – iOSD

+0

@Dipak Chaudhari Nickが語ったことは真実です。配列からオブジェクトを削除する前に、iの値が配列の数よりも大きくなるように、ビューから削除するコードは動作しません。しかし、私は状態変化が働くかもしれないと思う。 [array count]> = 0を使用している場合は、私にとってはうまくいかないでしょう。 – iOSD