2012-02-13 6 views
0

こんにちは私はストップウォッチビューを持っています。ユーザーが戻るボタンをクリックして別のビューに移動すると、ストップウォッチは停止します。私は人々がそれが解放されているから教えてくれました。Xcodeでビューを解放しない方法

私はストップウォッチを走り続けたい。

どのように私はリリースを解除するのか、リリースしないのですか?

ここに私のコードです。あなたはビューからタイマーを独立させることができ

:.hの

UILabel *stopWatchLabel; 

NSTimer *stopWatchTimer; // Store the timer that fires after a certain time 
NSDate *startDate; // Stores the date of the click on the start button 

@property (nonatomic, retain) IBOutlet UILabel *stopWatchLabel; 

- (IBAction)onStartPressed:(id)sender; 
- (IBAction)onStopPressed:(id)sender; 

.M

- (void)viewDidUnload 
{ 
[self setStopWatchLabel:nil]; 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
} 


- (void)updateTimer 
{ 
NSDate *currentDate = [NSDate date]; 
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"HH:mm:ss.SSS"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
NSString *timeString=[dateFormatter stringFromDate:timerDate]; 
stopWatchLabel.text = timeString; 
} 

- (IBAction)onStartPressed:(id)sender { 
startDate = [NSDate date]; 

// Create the stop watch timer that fires every 10 ms 
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 
                target:self 
               selector:@selector(updateTimer) 
               userInfo:nil 
               repeats:YES]; 
} 

- (IBAction)onStopPressed:(id)sender { 
[stopWatchTimer invalidate]; 
stopWatchTimer = nil; 
[self updateTimer]; 
} 

答えて

0

ビューコントローラの動作を変更するよりも、私は、別のアプローチをしようとするだろう

タイマ機能を別のオブジェクトに移動させることによって、このようにして、タイマオブジェクトは、ビューコントローラオブジェクトとは異なるライフサイクルを有する。たとえば、アプリケーションデリゲートでタイマーオブジェクトを作成(および解放)し、そのオブジェクトへの参照を作成し、ビューコントローラでそのオブジェクトにアクセスできます。