我试图寻找类似的问题,但没有找到任何好的解决方案。所以我希望有人可以帮助我。
基本上我在这个方法中有一个漏洞,用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上添加一个版本,应用程序崩溃。任何人都知道这里有什么问题吗?
答案 0 :(得分:2)
将Card
对象添加到cards
后,您需要释放它们。将它们添加到cards
时,每个对象的保留计数会自动增加。因此,添加:
[card1 release];
[card2 release];
之后
[cards addObject:card1];
[cards addObject:card2];