2011-05-11 50 views
0

我正在使用屬性。 self.refreshTimer = nil;在這個字符串中,我得到了CFRelease錯誤。 爲什麼我得到一個錯誤?NSTimer內存錯誤

@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]; 
} 
+0

你能告訴我們timerRefreshGPS方法做什麼嗎?你確定它沒有使計時器失效並釋放計時器嗎? – Ravin 2011-05-13 12:57:33

+0

- (無效)timerRefreshGPS:(ID)發送方 { \t self.isNeededRefreshGPS = YES; } – Voloda2 2011-05-17 09:55:50

回答

0
self.refreshTimer = nil; 

設置self.refreshTimer =零,因爲refreshTimer是一個屬性有釋放refreshTimer的當前值,然後將其分配零的效果。你已經雙倍發行。

我也不確定您是否擁有您認爲您擁有的引用 - 您使用的分配形式應該會返回一個自動釋放計時器,並且在您將其安裝到運行循環中時,它將被保留。我不認爲你在這裏擁有一個參考。