これはおそらく私が今知っておくべきことです。私はNSTimerクラスメソッドを使ってNSTimerのインスタンスを作成しています。返されたオブジェクトがオートレリースされていることを確信しています。私の質問は、タイマオブジェクト(メソッド:1)を保持して解放したり、単に@property(: 2)(または私は完全に異なる何かをすべきか?)クラスメソッドで作成されたオブジェクトを保持していますか?
// METHOD: 1
@property (nonatomic, retain) NSTimer *myTimer;
。
NSTimer *tempTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(executeOnTimer) userInfo:nil repeats:YES];
[self setMyTimer:tempTimer];
//[tempTimer release];
。
- (void)dealloc {
[pulseTimer release];
[super dealloc];
}
または単に:
は// METHOD: 2
myTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(executeOnTimer) userInfo:nil repeats:YES];
編集:私はちょうど書いた場合
一つの最後のポイント、プロパティに割り当てずに(下記参照)は、タイマーをしようとしているすべての可能性があります割り当てが解除されると、基本的にはプログラムが終了するまで周りにいます。それがどのように保持されているのか不思議です。
[NSTimer scheduledTimerWithTimeInterval:120.0 target:self selector:@selector(executeOnTimer) userInfo:nil repeats:YES];
'NSTimer'には特別な配慮があります。 'scheduledTimerWithTimeInterval ...'メッセージはタイマーを開始するだけでなく、それをrunloopに追加します。これにより、 'NSTimer'が解放されるのを防ぎ、実行ループ内部から所有権を取り戻すために' invalidate'メソッドを呼び出す必要があります。 [ - (void)invalidate]の詳細(http://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSTimer_Class/Reference/NSTimer.html#//apple_ref/occ/instm/ NSTimer /無効化)。 –