我正在使用属性。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];
}
发布于 2011-10-18 03:45:50
self.refreshTimer = nil;
设置self.refreshTimer = nil,因为refreshTimer是一个属性,其效果是释放refreshTimer的当前值,然后将nil赋值给它。你已经双倍释放了。
我也不确定你是否拥有你认为你拥有的引用-你使用的分配形式应该返回一个自动释放的计时器,当你在run循环中安装它时,它将被保留。我不认为你真的拥有这里的引用。
https://stackoverflow.com/questions/5965809
复制相似问题