2012-07-13 43 views
1

我想每500毫秒執行一段代碼,總共10秒鐘。我的代碼工作執行每半秒鐘與此代碼iOS - 執行一段代碼10秒

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES]; 

,但我似乎無法弄清楚如何停止10秒後執行。 「重複」論證似乎沒有考慮到特定的時間。 有人能指點我應該去哪裏的方向嗎?

感謝 布賴恩

+0

會[這裏](http://stackoverflow.com/a/9258071/264775)回答適用? – thegrinner 2012-07-13 14:46:42

回答

5

您需要在信息的NSTimer是invalidate scheduledTimerWithTimeInterval:目標:選擇:用戶信息:重複:給你。例如,分配NSTimer該方法返回給您的屬性或iVar類,並在10秒鐘後調用invalidate

例子:

.H:

@interface myClass{ 
NSTimer *myT; 
} 
[...] 

.M:

[...] 
{ 
    myT = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES]; 

    [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(stop) userInfo:nil repeats:NO]; 
} 

-(void)stop{ 
    [myT invalidate]; 
} 
[...] 

您可以通過實施某種finish標誌避免再次NSTimer,如果你想和追蹤有多少次你發送了getLevel方法,因爲它每隔0.5秒就會有20次。

但我寧可2個NSTimer對象,因爲你知道這是10秒不管其他計時器,它可能會決定更改,向上或向下它的頻率......

+0

完美。非常感謝。 – 2012-07-13 15:27:07

1

做的最好的事情是使財產對你的班級。

@property (nonatomic, strong) NSTimer *timer; 
@property (nonatomic, strong) int ticks; 

然後在getLevel選擇稱之爲:

if (ticks >= 20) [self.timer invalidate]; 
// 20 is 10 seconds * 500 milliseconds 
ticks++; 
+0

在10秒內只有20個500ms,而不是5000,if語句應該是if(ticks == 20)not> 20。 – 2012-07-13 15:13:37

+0

謝謝你的修復。 :) – 2012-07-13 16:06:47

0

您可以設置其他定時器使用無效停止它。只要在伊娃或財產保留這個計時器的參考。

檢查此answer欲知更多信息。

1

你可以去的另一種方法是定義一個選擇器,例如-(void)stopTimer{} 其中你使計時器無效。然後,當你在第一時間創建計時器執行下列操作之一:

[self performSelector:@selector(stopTimer) withObject:nil afterDelay:10.0];