我遇到以下代码的内存泄漏问题。尽管我可以告诉我,我不明白为什么问题仍然存在,但在调用时它仍然没有释放。我正在检测仪器中的问题,以下代码使它的“卡”类保持活着,即使应该释放它们。 欢迎任何帮助。
...
...
-(id)initDeckWithCardsPicked: (NSMutableArray*)cardsPicked andColors:(NSMutableArray*)cardColors
{
self = [self init];
if (self != nil) {
int count = [cardsPicked count];
for (int i=0; i<count; i++) {
int cardNum = [[cardsPicked objectAtIndex:i] integerValue];
Card * card = [[MemoryCard alloc] initWithSerialNumber:cardNum position: CGPointZero color:[cardColors objectAtIndex:i]];
[_cards addObject: card];
[card release];
}
}
return self;
}
- (id) init
{
self = [super init];
if (self != nil) {
self.bounds = (CGRect){{0,0},[Card cardSize]};
self.cornerRadius = 8;
self.backgroundColor = kAlmostInvisibleWhiteColor;
self.borderColor = kHighlightColor;
self.cards = [NSMutableArray array];
}
return self;
}
...
...
答案 0 :(得分:1)
如果不查看其余的代码,很难知道问题所在,但您是否尝试在xcode中使用静态分析器?它对于发现内存泄漏非常有用。
要使用它,请从“构建”菜单中选择“构建和分析”。更多详情请见Apple's dev website.
答案 1 :(得分:0)
使用addObject
将卡添加到_cards NSMutableArray时,会发送一条保留消息。因此,只要将_cards保留在内存中,就会为每个成分保留一个指针。只要您的dealloc
释放数组,或者您在其他地方发布,您就可以使用此处发布的内容(假设您的initWithSerialNumber方法返回一个保留对象)。