无法在另一个类中使nstimer无效

时间:2012-07-03 07:58:31

标签: objective-c

我无法使NSTimer失效,他继续跑。

A类中我有:

-(void)startMachine
{
    NSLog(@"START THE MACHINE " );
    doesOn=1;
      machineClock=[NSTimer scheduledTimerWithTimeInterval:0.05
                                     target:self
                                   selector:@selector(recordMachine:)
                                   userInfo:nil
                                    repeats:YES];
 ....//machineClock is on the .h file in interface
}

-(void)recordMachine:(NSTimer*)timer
{

    NSLog(@"recordMachine");
...

-(void)stopMachine
{

         NSLog(@"STOP THE MACHINE !! " );
         [machineClock invalidate];
         machineClock=nil;
...
}

然后在 b级中,使用以下命令启动和停止它:

   classAinst=[recordMachine alloc];
    [classAinst startMachine]; //it starts here.
    ......
   [classAinst stopMachine]; //it class the method to stop it,but the timer still ticks.

可能是什么原因引起的? 我需要为计时器创建一个属性吗? a类是从b持有计时器,所以应该阻止它吗?

2 个答案:

答案 0 :(得分:0)

classB.h

@interface classB : ParentClass
@property(nonatomic, strong)ClassA *Aclass;
@end

classB.m

 @implementation classB
 @synthesize Aclass;
 - (void)viewDidLoad
{
    [super viewDidLoad];
    Aclass =[[ClassA alloc]init];
    [Aclass startMachine];
    [Aclass stopMachine];
}
 @end

你丢失了classA的实例,这就是为什么你也失去了它的控制权。试试上面的代码。

答案 1 :(得分:0)

从启动它的不同线程停止计时器将导致此问题。

如果您没有使用多个线程,那么您最有可能停止错误的计时器或错误对象的计时器。你可以调试这个,如果每次启动一个计时器,你打印它的地址和启动它的对象:

NSLog(@"starting %@ owned by %@", timer, self);

停止时也一样:

NSLog(@"stopping %@ owned by %@", timer, self);

然后确保数字匹配。 (并且NSLog输出的ProcessName[11337:707]部分中的数字也必须匹配:第二个是线程ID,如果它不同,则表示你从其他线程停止计时器。)