Memory management NSTimer内存错误

Memory management NSTimer内存错误,memory-management,nstimer,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 tar

我正在使用财产。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];
}
设置self.refreshTimer=nil,因为refreshTimer是一个属性,其效果是释放refreshTimer的当前值,然后将nil分配给它。你已经双倍释放了


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

您能告诉我们timerRefreshGPS方法的作用吗?您确定它没有使计时器无效并释放计时器吗?-void timerRefreshGPS:id发送者{self.isNeededRefreshGPS=YES;}
self.refreshTimer = nil;