Memory management NSTimer内存错误
我正在使用财产。self.refreshTimer=nil;在这个字符串中,我得到了CFRelease错误。 为什么我会出错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
@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;