静态分析仪说我有潜在的物体泄漏

时间:2010-07-02 14:30:09

标签: iphone objective-c xcode memory-management static-analysis

这是我制作一些闪存卡的对象。第一种方法(我省略了主要部分)使用传入的运算符生成一个Card对象的NSMutabaleArray并且工作正常。第二种方法,“drawFromDeck”从我的视图控制器调用Deck对象,也可以正常工作,但静态分析器说我可能正在泄漏一个对象。

这是代码。

#import "Deck.h"

@class Deck;
@implementation Deck

@synthesize cards;

- (id)initDeckWithOperator: (NSString*)mathOper {

...

 return self;
}

- (id)drawFromDeck {
    int index = random() % [cards count];
    Card* selectedCard = [[cards objectAtIndex:index] retain];
    [cards removeObjectAtIndex:index];
    return selectedCard;
}

@end

1 个答案:

答案 0 :(得分:6)

是的,你正在泄漏一个物体。你应该

return [selectedCard autorelease];

-retain selectedCard的原因是-release,因此您有责任-release-autorelease但是您不能使用-drawFromDeck,因为它必须在函数结束后有效,因此您需要使用-release将所有权转移到自动释放池。

当然,调用{{1}}的方法不应该{{1}}返回值。