0

(最初のオブジェクトを除いて)glossTermsに追加された各オブジェクトのメモリリークが発生しています。リークは「A+1保持カウント(所有参照)」を持っていると説明されています-私はインターネットを検索し、オブジェクト割り当て内で「コピー」を使用することに言及しているスレッドをいくつか見つけました。これを試しましたが、まだメモリリークが発生していたため、適切に実装できなかったに違いありません。

- (void)createTermData {

NSMutableArray *glossTerms=[[NSMutableArray alloc] init];

[glossTerms addObject:[[NSMutableDictionary alloc]
                       initWithObjectsAndKeys:@"Approximate",@"term",
                       @"Test",@"definition",@"Test2",@"example",nil]];

[glossTerms addObject:[[NSMutableDictionary alloc]
                       initWithObjectsAndKeys:@"Arithmetic Mean",@"term",
                       @"Test",@"definition",@"Test2",@"example",nil]];

termData=[[NSMutableArray alloc] initWithObjects:
            glossTerms,nil];

[glossTerms release];

誰かがこれに光を当てることができれば、私は非常に感謝します。

ありがとうございました

4

1 に答える 1

2

NSArrayは、追加したオブジェクトを保持し、ライフサイクルの終了時またはアレイから削除した後(可変の場合)に自動的に解放します。

オブジェクトを割り当てると、保持カウントは+1になります。

したがって、オブジェクトを割り当てて配列に追加すると、保持カウントは+2になります。つまり、オブジェクトを自動解放するか(追加するのと同じ行に割り当てているため、この場合はこれを実行します)、ポインターへの参照がある場合は、オブジェクトを追加した後に解放する必要があります。あなたの場合、あなたは参照を持っていないので、それを自動解放することが最善の策です。

NSMutableArray *glossTerms=[[NSMutableArray alloc] init];

[glossTerms addObject:[[[NSMutableDictionary alloc]
                       initWithObjectsAndKeys:@"Approximate",@"term",
                       @"Test",@"definition",@"Test2",@"example",nil] autorelease]];

[glossTerms addObject:[[[NSMutableDictionary alloc]
                       initWithObjectsAndKeys:@"Arithmetic Mean",@"term",
                       @"Test",@"definition",@"Test2",@"example",nil] autorelease]];

termData=[[NSMutableArray alloc] initWithObjects:
            glossTerms,nil];

[glossTerms release];

FWIW、静的メソッド[NSMutableDictionarydictionaryWith...]は自動解放されたオブジェクトを自動的に返します。

于 2011-04-20T23:46:40.750 に答える