簡體   English   中英

如何停止我不知道的NSTimer是否已發布

[英]How to stop an NSTimer that I don't know is released or not

很抱歉提出這個問題,但是現在是第三天,我試圖解決這個問題,到目前為止還沒有任何進展。

問題是這樣的:在游戲過程中,用戶回答一個問題和下一個問題之間存在停頓。 同樣在其他幾種情況下,游戲中也會出現這種暫停。 為此,我使用一個NSTimer。

在.h中,我有:

@property(nonatomic,retain) NSTimer *scheduleTimer;

並在.m中

@synthesize scheduleTimer;

scheduleTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target: self selector: @selector(playFeedbackSound) userInfo: nil repeats: NO];

現在這很好用。 但是,當用戶退出ViewController時,我需要使計時器無效。 否則,計時器將觸發,然后使應用程序崩潰或彈出不屬於其他視圖等的內容。

因此我寫:

- (void)viewWillDisappear:(BOOL)animated {
    [scheduleTimer invalidate];   
}

現在,如果確實設置了計時器,就可以完成此工作。 但是,如果沒有安排這樣的計時器,則應用程序將崩潰。

我嘗試了可能存在的所有內容,包括@try(它也使應用程序崩潰,Zombie說“ * -[CFRunLoopTimer無效]:消息發送到已釋放實例0x567640”)。 由於計時器是在完成后釋放的,因此[scheduleTimer isValid]也將使應用程序崩潰。

現在我已經非常絕望了,作為最后的選擇,我正在考慮將計時器替換為不可見的UIView animateWithDuration。

但是,我認為這應該是一個非常標准的情況。 我只是不知道為什么我找不到這個非常明顯的任務的答案。 你能幫我嗎? 謝謝

我認為問題在於,在使NSTimer invalidate之前,它會自動釋放。

因此,您應該執行以下操作:

scheduleTimer = [[NSTimer scheduledTimerWithTimeInterval:1.0 target: self selector: @selector(playFeedbackSound) userInfo: nil repeats: NO] retain];

並且您還應該在viewWillDisappear: release計時器viewWillDisappear:

[scheduleTimer release];

但是,更好的解決方案可能是使用dot屬性語法來保留/釋放:

self.scheduleTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target: self selector: @selector(playFeedbackSound) userInfo: nil repeats: NO];

接着:

- (void)viewWillDisappear:(BOOL)animated {
    if (self.scheduleTimer != nil) {
        [self.scheduleTimer invalidate];
        self.scheduleTimer = nil;
    }
}

創建使計時器無效的方法,該方法還將屬性設置為nil:

- (void) invalidateTimer
{
    if (self.scheduleTimer) {
       [self.scheduleTimer invalidate];   
       self.scheduleTimer = nil;  
    }
}

...,然后在您使計時器無效時調用該方法。 例如:

- (void)viewWillDisappear:(BOOL)animated 
{
   [super viewWillDisappear: animated];
   [self invalidateTimer];
}

使用以下方法確保保留計時器:

self.scheduleTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target: self selector: @selector(playFeedbackSound) userInfo: nil repeats: NO];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM