2010-11-22 15 views
0

NSTimerをrunTimeで停止する方法はありますか? 。NSTimerは実行時に停止しますか?

NSTimerは、何度も何度も実行されます.but私は、次のコードを使用しています(私はNStimerを繰り返したい、私は実行時に停止する)

- (void)TimerCallback 
    { 

    ..... 
    [self.tim invalidate]; 
     self.tim = nil; 

} 


-(void)timerStart 
{ 


    self.tim = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(TimerCallback) userInfo:nil repeats:YES]; 

} 
+0

NSTimerがメッセージを無効にした後に停止しない理由を正しく理解していると思います。「tim」は保持されていますか?またはコピー?プロパティーを宣言している間に – Sanniv

+0

私はproperyで保持するように設定しました。私はコピーを割り当てる必要がありますか? –

答えて

2
  1. それは繰り返しです:NOあなたの場合一度だけ実行したい場合あなたは繰り返します:はい。

  2. それは[ティム無効化]で、ない self.timは、それはそれを解放しているため

  3. は、ない DO self.tim = nilを行い無効。無効化はすべてを行います。

  4. レコードについては、プロパティがすべて正しいことを確認してください。つまり、
    @property(nonatomic、retain)NSTimer * happyTimer;
    および
    @synthesize happyTimer;

  5. レコードの場合、同じスレッドである必要があります。

希望します。ここで

は作業製造例からのコードカットのすべての行です:

NSTimer *ttt; 
@property (nonatomic, retain) NSTimer *ttt; 
@synthesize ttt; 
self.ttt = [NSTimer scheduledTimerWithTimeInterval:7.00 
    target:self selector:@selector(ringBell) userInfo:nil repeats:YES]; 
if ([ttt isValid]) 
    [ttt invalidate]; 
[ttt release]; // in dealloc 

あなたは、いくつかのデバッグ行のNSLog(「Iちょうど無効化」@)を追加する必要があります。あなたが何か基本的な間違いをしていないことを確認してください。

+0

こんにちは、私はリピートしたい:はい...あなたが言った指示に従ったが、タイマーはまだ動いている... –

+0

ポイント2について;どちらも同じです。 ポイント3について; self.timはタイマーをnilに割り当てます。それが(保持)の場合はメモリを解放し、割り当てられている場合は解放済みです。どちらの場合もOKです。 – seppo0010

0

コードが正しいようです。通常、この問題はタイマーの2倍を開始しています。試してみることができます



-(void)timerStart { 
    [self.tim invalidate]; 
    self.tim = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(TimerCallback) userInfo:nil repeats:YES]; 

} 
関連する問題