我曾尝试搜索类似的问题,但没有找到任何好的解决方案。所以我希望有人能帮助我。
基本上我在这个用 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 上尝试过自动释放,试图让它们成为类变量。但似乎没有任何帮助。要么我有泄漏,要么如果我尝试在 card1 或 card2 上添加一个版本,应用程序崩溃。有人知道这里出了什么问题吗?
最佳答案
将每个 Card
对象添加到 cards
后,您需要释放它们。将它们添加到 cards
时,每个对象的保留计数会自动增加。因此添加:
[card1 release];
[card2 release];
之后
[cards addObject:card1];
[cards addObject:card2];
关于objective-c - 内存泄漏、nsmutablearray 和自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6876754/