我想每500毫秒執行一段代碼,總共10秒鐘。我的代碼工作執行每半秒鐘與此代碼iOS - 執行一段代碼10秒
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
,但我似乎無法弄清楚如何停止10秒後執行。 「重複」論證似乎沒有考慮到特定的時間。 有人能指點我應該去哪裏的方向嗎?
感謝 布賴恩
我想每500毫秒執行一段代碼,總共10秒鐘。我的代碼工作執行每半秒鐘與此代碼iOS - 執行一段代碼10秒
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
,但我似乎無法弄清楚如何停止10秒後執行。 「重複」論證似乎沒有考慮到特定的時間。 有人能指點我應該去哪裏的方向嗎?
感謝 布賴恩
您需要在信息的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秒不管其他計時器,它可能會決定更改,向上或向下它的頻率......
完美。非常感謝。 – 2012-07-13 15:27:07
做的最好的事情是使財產對你的班級。
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) int ticks;
然後在getLevel選擇稱之爲:
if (ticks >= 20) [self.timer invalidate];
// 20 is 10 seconds * 500 milliseconds
ticks++;
在10秒內只有20個500ms,而不是5000,if語句應該是if(ticks == 20)not> 20。 – 2012-07-13 15:13:37
謝謝你的修復。 :) – 2012-07-13 16:06:47
您可以設置其他定時器使用無效停止它。只要在伊娃或財產保留這個計時器的參考。
檢查此answer欲知更多信息。
你可以去的另一種方法是定義一個選擇器,例如-(void)stopTimer{}
其中你使計時器無效。然後,當你在第一時間創建計時器執行下列操作之一:
[self performSelector:@selector(stopTimer) withObject:nil afterDelay:10.0];
會[這裏](http://stackoverflow.com/a/9258071/264775)回答適用? – thegrinner 2012-07-13 14:46:42