0

对于添加到glossTerms 的每个对象(除了第一个对象),我都会遇到内存泄漏。泄漏被描述为具有“A +1 保留计数(拥有引用)” - 我搜索了 Internet 并找到了几个线程,其中提到在对象分配中使用“复制”。我试过这个,但我一定没有正确实现它,因为我仍然有内存泄漏。

- (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,静态方法 [NSMutableDictionary dictionaryWith...] 自动返回一个自动释放的对象。

于 2011-04-20T23:46:40.750 回答