2011-02-06 14 views
0

このコードを保持してはよくNSTimerについてのご質問や

@property (nonatomic, retain) NSTimer *timer; 
self.timer = [[NSTimer timerWithTimeInterval:kAdsAppearTimeInterval target:self selector:@selector(timerFired:) userInfo:nil repeats:NO] retain]; 

このコードはCFReleaseを得るに動作します。しかし、なぜ?一度タイマーを3回と自己を維持してしまいます

@property (nonatomic, retain) NSTimer *timer; 
self.timer = [[NSTimer timerWithTimeInterval:kAdsAppearTimeInterval target:self selector:@selector(timerFired:) userInfo:nil repeats:NO] retain]; 

:私は、プロパティ

self.timer = [NSTimer timerWithTimeInterval:kAdsAppearTimeInterval target:self selector:@selector(timerFired:) userInfo:nil repeats:NO]; 
+1

「このコードはCFReleaseを取得する」とはどういう意味ですか? – kubi

+0

私のアプリがクラッシュしました - 私はCFReleaseを取得します – Voloda2

+0

しかし、 "CFRelease"はエラーではありません。 –

答えて

10

ない上に行くためにたくさん...しかしを保持して使用します。

  1. タイマーの対象となるためにプロパティの割り当て

  2. self 1のタイマー+1それを

  3. をスケジュールするための-retain

  4. ためのタイマー1タイマー1

タイマーは、起動時に1回リリースされます(実行ループから予定外になるため)。 selfは、タイマーが無効になったり解放されたりすると解放されます(気にする必要はありません)。

したがって、2つの保持カウントが考慮されます。上のコードのretainの呼び出しはノイズです。不動産譲渡がそれを保持するので気にしないでください。

これにより、プロパティは保持されます。最も明白な方法は、-deallocでタイマーを解放することです。

ただし、起動する前にタイマーを無効にする必要がある場合を除き、タイマーを参照するインスタンス変数を持つ理由はありません。あなたがiVarを持っていても、の場合、timerFired:メソッドでself.timer = nilを設定している限り(何処でも無効にした場合はnilに設定してください)、タイマを保持する理由はありません。

+0

*予定* TimerWithTimeInterval:...?おそらく、 – jrc

+0

。うまくいけば、OPは彼らが事を予定する必要があることを理解しました。 :) – bbum

0

繰り返しのないタイマーの場合、インスタンス変数への参照が必要な場合は、混乱を避けるために、宣言にretainプロパティを設定することはお勧めしません。インスタンス変数(myTimer)

myTimer = [NSTimer scheduledTimerWithTimeInterval:myTimerInterval 
              target:self 
              selector:@selector(myTimerFired:) 
              userInfo:nil 
              repeats:NO]; 

タイマーがトリガーを設定

、あなたはそれ以来ゼロとしてインスタンス変数をマークすることができ、そのタイマーが

- (void) myTimerFired: (NSTimer *) theTimer{ 

      myTimer = nil; 
     //etc 
    } 

ます場合は、この方法を解雇されたときに解放インスタンス変数を参照する必要があります(たとえば、View Controllerを終了するときにタイマーを無効にするなど)。

-(void) onBack { 
      if(myTimer){ 
       [myTimer invalidate]; 
       myTimer = nil; 
       } 
    } 
関連する問題