我为添加到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];
如果你们中的任何人能够对此有所了解,我将非常感激。
谢谢
答案 0 :(得分: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 ...]自动返回一个自动释放的对象。