Ошибка памяти NSTimer - PullRequest
       5

Ошибка памяти NSTimer

0 голосов
/ 11 мая 2011

Я использую собственность.self.refreshTimer = ноль;В этой строке я получил ошибку 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 голосов
/ 18 октября 2011
self.refreshTimer = nil; 

установка self.refreshTimer = nil, так как refreshTimer - это свойство, которое освобождает текущее значение refreshTimer, а затем присваивает ему значение nil.Вы дважды отпустили.

Я также не уверен, что у вас есть ссылки, которые, по вашему мнению, у вас есть - форма распределения, которую вы используете, должна возвращать таймер с автоматическим выпуском, и он будет сохранен, когдаВы устанавливаете это в цикле выполнения.Я не думаю, что у вас на самом деле есть ссылка здесь.

...