内存泄漏与单身

时间:2010-11-11 19:36:47

标签: iphone objective-c

我有一个单例类,init方法中的行导致内存泄漏,我不知道为什么......

这是我的实施

static timerController *sngTimer = nil;

@implementation timerController

@synthesize repeatingTimer;
@synthesize dateComp;
@synthesize bPause;

+(timerController *) singletonTimer
{
    @synchronized(self){
        if (sngTimer == nil ) 
        {
            sngTimer = [[timerController alloc]init];
        }
    }

    return sngTimer;
}

-(id)init
{
    self = [super init];

    if (self != nil) {

        dateComp = [[NSDateComponents alloc] init];         ///this line cause memory leak
        NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; ///this line cause memory leak

        [dateComp setCalendar:gregorianCalendar]; ///this line cause memory leak

        [gregorianCalendar release];

        bPause = FALSE;
    }

    return self;
}

3 个答案:

答案 0 :(得分:3)

我不知道你是如何检测泄漏的,但很可能你使用的任何工具都注意到你没有dealloc方法来释放你在那里创建的对象。你可能应该有它的完整性,但只要该类只用作单例,它就没关系。

答案 1 :(得分:2)

这不是泄漏。单身人士永远(通常)留在身边,所以假设留在记忆中。

答案 2 :(得分:1)

Chuck's answer是正确的。实现-dealloc方法,在其中,将dateComp属性设置为nil或释放相应的ivar。 -dealloc永远不会被调用,但会关闭静态分析器。

这是一篇关于subtleties of singletons的一些好文章。