内存泄漏,nsmutablearray和自定义对象

时间:2011-07-29 17:26:23

标签: objective-c ios xcode

我试图寻找类似的问题,但没有找到任何好的解决方案。所以我希望有人可以帮助我。

基本上我在这个方法中有一个漏洞,用Card对象填充一个数组(在这个循环之上创建并填充了tempArray):

for(int i = 0; i < numberOfCards; i += 2) {
    int randomNumber = (arc4random() % [tempArray count]);
    NSNumber *number = [tempArray objectAtIndex:randomNumber];
    [tempArray removeObject:number];

    Card *card1 = [[Card alloc] initWithCategory:category andNumber:[number intValue]];
    Card *card2 = [[Card alloc] initWithCategory:category andNumber:[number intValue]];

    [number release];

    [cards addObject:card1];
    [cards addObject:card2];
}

该方法确实包含更多逻辑,但我很确定此循环包含泄漏。当我用Instruments运行它时,我发现Card对象没有被释放。在dealloc方法中,我确实释放了数组,我认为这也会释放数组中的对象吗?

-(void) dealloc {
    [cards release];

    [super dealloc];
}

我在card1和card2上尝试过autorelease,试图让它们成为类变量。但似乎没有任何帮助。要么我有泄漏,要么我尝试在card1或card2上添加一个版本,应用程序崩溃。任何人都知道这里有什么问题吗?

1 个答案:

答案 0 :(得分:2)

Card对象添加到cards后,您需要释放它们。将它们添加到cards时,每个对象的保留计数会自动增加。因此,添加:

[card1 release];
[card2 release];

之后

[cards addObject:card1];
[cards addObject:card2];