2011-01-10 6 views
0

このコードにはリークがありますか?このコピーコードにはリークがありますか?

// Move the group 
Group *movedGroup = [[Group alloc] init]; 
movedGroup = [[[[GroupList sharedGroupList] groups] objectAtIndex:fromIndex] copy]; 
[[GroupList sharedGroupList] deleteGroup:fromIndex]; 
[[GroupList sharedGroupList] insertGroup:movedGroup atIndex:toIndex]; 

// Update the loadedGroupIndex pointer 
if (loadedGroupIndex < fromIndex & loadedGroupIndex >= toIndex) { 
    loadedGroupIndex = loadedGroupIndex + 1; 
} else if (loadedGroupIndex > fromIndex & loadedGroupIndex < toIndex) { 
    loadedGroupIndex = loadedGroupIndex - 1; 
} else if (loadedGroupIndex == fromIndex) { 
    loadedGroupIndex = toIndex; 
} 
[movedGroup release] 

答えて

2

最初にインスタンス化されたグループが漏洩します。あなたはそれへの参照を紛失しました(movedGroup = ...を割り当てる)、それは自動解放のためにマークされていません。最初の2行を以下のように減らすことができます。

Group *movedGroup = [[[[GroupList sharedGroupList] groups] objectAtIndex:fromIndex] copy]; 

これは、リークなしで同じことを行います。

+0

です。 movedGroupは* alloced *であり、Groupオブジェクトを保持するメモリのチャンクへのポインタになったことを意味します。その後、あなたはそのオブジェクトから離れたところを指し、代わりにあなたの* copied *オブジェクトを指していました。これにより、割り当てられたGroupオブジェクトはハングアップしていました。プロジェクトをビルドして解析する*アナライザーは、最初の行で作成したオブジェクトで何も行われていないこと、およびリークが発生している可能性があることを伝えます。 –

+0

ええ、振り返って明らかです。そしてそれは私にこれを指摘したビルドと分析でした。私はちょうど私がそれを正しく理解したことを確認したかった。入力いただきありがとうございます。 –

関連する問題