如何解决IOS将相同但不同的对象设置为一个内存地址
|@interface ClassWithTimer : NSObject {
}
-(void) startTimer;
-(void) stopTimer;
@end
@implementation ClassWithTimer
NSTimer *up;
-(void) startTimer{
up = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
-(void) stopTimer{
[up invalidate];
}
- (void) doSomething{}
@end
那我做
- (IBAction)startTimers:(id)sender {
timer1 = [[ClassWithTimer alloc] initWithName:@\"time1\"];
timer2 = [[ClassWithTimer alloc] initWithName:@\"time2\"];
[timer1 startTimer];
[timer2 startTimer];
[timer1 stopTimer];
[timer2 stopTimer];
}
当我停止计时器时,我看到计时器1与计时器2相同,并且invalidate方法在[timer2 stopTimer]中引发异常,因为此对象此时已失效。
我知道这是iOS政策,但我找不到相关文档。解决方法
移动
NSTimer *up;
进入接口块内的.h文件。,NSTimer必须是一个iVar,您只是在该类中自由声明,允许两个类共享同一计时器。另外,您需要释放前一个计时器,然后将新计时器保留在startTimer中。
@interface ClassWithTimer : NSObject {
NSTimer *up; //Declare iVar(instance variables) here
}
-(void) startTimer;
-(void) stopTimer;
@end
@implementation ClassWithTimer
-(void) startTimer{
[up invalidate];
[up release];
up = [[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSomething) userInfo:nil repeats:YES] retain];
-(void) stopTimer{
[up invalidate]; //Do these same this line
[up release]; //and this line in your dealloc
up = nil;
}
- (void) doSomething{}
@end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。