我正在使用财产。 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];
}
答案 0 :(得分:0)
self.refreshTimer = nil;
设置self.refreshTimer = nil,因为refreshTimer是一个属性,具有释放refreshTimer的当前值,然后为其分配nil的效果。你已经双重释放了。
我也不确定您是否拥有您认为存在的引用 - 您使用的分配形式应返回自动释放的计时器,并且在运行循环中安装它时将保留它。我认为你实际上并没有这里的参考资料。