内存泄漏问题

时间:2010-05-24 05:54:34

标签: iphone objective-c memory-leaks

我遇到以下代码的内存泄漏问题。尽管我可以告诉我,我不明白为什么问题仍然存在,但在调用时它仍然没有释放。我正在检测仪器中的问题,以下代码使它的“卡”类保持活着,即使应该释放它们。 欢迎任何帮助。

... 
...
-(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;
}
...
...

2 个答案:

答案 0 :(得分:1)

如果不查看其余的代码,很难知道问题所在,但您是否尝试在xcode中使用静态分析器?它对于发现内存泄漏非常有用。

要使用它,请从“构建”菜单中选择“构建和分析”。更多详情请见Apple's dev website.

答案 1 :(得分:0)

使用addObject将卡添加到_cards NSMutableArray时,会发送一条保留消息。因此,只要将_cards保留在内存中,就会为每个成分保留一个指针。只要您的dealloc释放数组,或者您在其他地方发布,您就可以使用此处发布的内容(假设您的initWithSerialNumber方法返回一个保留对象)。