NSTimer内存错误

时间:2011-05-11 14:22:38

标签: memory-management nstimer

我正在使用财产。 self.refreshTimer = nil;在这个字符串中我得到CFRelease错误。  为什么我会收到错误?

@property (nonatomic, retain) NSTimer* refreshTimer;

- (id) init
{
    self = [super init];
    if (self != nil) 
    {
        self.refreshTimer = [NSTimer timerWithTimeInterval:600 target:self selector:@selector(timerRefreshGPS:) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:refreshTimer forMode:NSDefaultRunLoopMode];
    }
    return self;
}

-(void) updateUserGPSLocation:(CLLocation*)newLocation
{
    [refreshTimer invalidate];
    [refreshTimer release];
    self.refreshTimer = nil; 

    self.refreshTimer = [NSTimer timerWithTimeInterval:600 target:self selector:@selector(timerRefreshGPS:) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:refreshTimer forMode:NSDefaultRunLoopMode];
}

- (void)dealloc 
{
    [refreshTimer invalidate];
    [refreshTimer release];
    self.refreshTimer = nil; 
    [super dealloc];
}

1 个答案:

答案 0 :(得分:0)

self.refreshTimer = nil; 

设置self.refreshTimer = nil,因为refreshTimer是一个属性,具有释放refreshTimer的当前值,然后为其分配nil的效果。你已经双重释放了。

我也不确定您是否拥有您认为存在的引用 - 您使用的分配形式应返回自动释放的计时器,并且在运行循环中安装它时将保留它。我认为你实际上并没有这里的参考资料。