2012-01-26 6 views
3

私のアプリには、NSMutableArrayのメンバーにアクセスするための複数のループがあります。ここでは例:私はINITのalloc /を使用して、異なる方法でiItemオブジェクトを作成し、MutableArrayにそれを追加した後に解放してしまった場合NSMutableArrayオブジェクトの反復。ベストプラクティス

for (a=0;a<[items count];a++) 
{ 
iItem *item = [[items objectAtIndex:a] autorelease]; 

    [page.view addSubview:item]; 

NSLog(@"Item Added: %d\nItem Frame X:%f Y:%f W:%f H:%f",item.itemId,item.frame.origin.x,item.frame.origin.y,item.frame.size.width,item.frame.size.height); 

    [item setDelegate:page]; 

    if ([[items objectAtIndex:a] zOrder] == 1) 
     [page.view sendSubviewToBack:item]; 
    else 
     [page.view bringSubviewToFront:item]; 

//[item release]; 
//item = nil; 

} 

私の質問は、必要に応じて使用することは、ループ内に作成iItemにわたる放出されています、使用後に?

ありがとうございました。を作成していないあなたがobjectAtIndex:経由でアクセス

答えて

4

番号の項目がされ、あなたはそれへの参照であること、大会ごとに、すでに自動解放を取得します。したがって、あなた自身のautorelease呼び出しを追加していると、あなたは実際にそれを解放してしまい、ぶら下がりポインタがあなたのアプリケーションをクラッシュさせる可能性があります。

14

omzが既に指摘されているため、あなたのアイテムは過剰にリリースされています。

for (iItem *item in items) 
{ 
    [page.view addSubview:item]; 

    NSLog(@"Item Added: %d\nItem Frame X:%f Y:%f W:%f H:%f",item.itemId,item.frame.origin.x,item.frame.origin.y,item.frame.size.width,item.frame.size.height); 

    [item setDelegate:page]; 

    if ([item zOrder] == 1) 
     [page.view sendSubviewToBack:item]; 
    else 
     [page.view bringSubviewToFront:item]; 
} 
:あなただけの配列にタイプ iItemのアイテムを持っている場合は、 速い列挙を使用することができます
関連する問題