1

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からのタイマーを保持しているので、停止する必要がありますか?

4

2 に答える 2

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 のインスタンスを失ったので、それを制御できなくなりました。上記のコードを試してください。

于 2012-07-03T08:32:02.973 に答える
0

タイマーを開始した別のスレッドからタイマーを停止すると、これが発生します。

複数のスレッドを使用していない場合は、間違ったタイマーまたは間違ったオブジェクトのタイマーを停止している可能性があります。タイマーを開始するたびに、タイマーのアドレスと開始しているオブジェクトを出力する場合は、これをデバッグできます。

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

そして、停止するときも同じです:

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

次に、数字が一致していることを確認します。(またProcessName[11337:707]、NSLog の出力の一部の数字も一致する必要があります。2 番目はスレッド ID であり、異なる場合は、他のスレッドからタイマーを停止することを意味します)。

于 2012-07-03T08:33:47.280 に答える