Sök…
parametrar
Parameter | detaljer |
---|---|
interval | Tiden, på några sekunder, för att vänta på att skjuta timern; eller, vid upprepade timers, tiden mellan bränningen. |
target | Objektet att ringa selector på |
selector | I Swift, ett Selector objekt som anger metoden att anropa på target |
repeats | Om det är false , avfyra timern endast en gång. Om det är true , avfyra timern varje interval . |
Anmärkningar
Med en NSTimer
kan du skicka ett meddelande till ett mål efter en viss tidsperiod.
Skapa en timer
Detta skapar en timer för att ringa doSomething
metoden på sig self
på 5 sekunder.
Snabb
let timer = NSTimer.scheduledTimerWithTimeInterval(5,
target: self,
selector: Selector(doSomething()),
userInfo: nil,
repeats: false)
Snabb 3
let timer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(doSomething()),
userInfo: nil,
repeats: true)
Objective-C
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomething) userInfo:nil repeats:NO];
Inställning av repetitioner till false/NO
indikerar att vi vill att timern bara ska avfyras en gång. Om vi ställer in detta till true/YES
, kommer det att avfyras var femte sekund tills manuellt ogiltigt.
Manuellt avfyra en timer
Snabb
timer.fire()
Objective-C
[timer fire];
Ringa fire
metoden orsakar en NSTimer att utföra uppgiften skulle det ha vanligtvis utförs på ett schema.
I en timer som inte upprepas gör detta timern automatiskt ogiltig. Det vill säga att det att ringa fire
innan tidsintervallet är upp kommer att resultera i endast en åkallelse.
I en upprepande timer kommer detta helt enkelt att åberopa handlingen utan att avbryta det vanliga schemat.
Invaliderar en timer
Snabb
timer.invalidate()
Objective-C
[timer invalidate];
Detta stoppar timern från att skjutas. Måste ringas från den tråd som timern skapades i, se Apples anteckningar :
Du måste skicka detta meddelande från tråden som timern installerades på. Om du skickar det här meddelandet från en annan tråd, kan det hända att ingångskällan som är associerad med timern inte tas bort från sin körslinga, vilket kan förhindra att tråden går ut ordentligt.
Anmärkningar: När timern har inaktiverats, är det omöjligt att avfyra samma ogiltiga timer. Istället måste du initiera den ogiltiga timern igen och utlösa brandmetoden.
Alternativ för timerfrekvens
Upprepad timerhändelse
Snabb
class ViewController: UIViewController {
var timer = NSTimer()
override func viewDidLoad() {
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: true)
}
func timerMethod() {
print("Timer method called")
}
func endTimer() {
timer.invalidate()
}
}
Snabb 3
class ViewController: UIViewController {
var timer = Timer()
override func viewDidLoad() {
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: true)
}
func timerMethod() {
print("Timer method called")
}
func endTimer() {
timer.invalidate()
}
}
Måste inaktiveras manuellt om så önskas.
Snabb
Icke upprepad fördröjd timerhändelse
NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: false)
Snabb 3
Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: false)
Timern avfyras en gång, 3 sekunder efter genomförandet. Inaktiveras automatiskt, efter avfyrning.
Överföring av data med Timer
Om du vill skicka data med timerutlösaren kan du göra det med parametern userInfo
.
Här är det enkla tillvägagångssättet som ger en kort uppfattning om hur du kan skicka data till den utlösta metoden från timern.
[ Swift 3 ]
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(iGotCall(sender:)), userInfo: ["Name": "i am iOS guy"], repeats:true)
[ Mål - C ]
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(iGotCall:)
userInfo:@"i am iOS guy" repeats:YES];
Ovanstående kodrad överför ["Name": "i am iOS guy"]
till userInfo
. Så nu när iGotCall
får samtal kan du få det överförda värdet enligt kodavsnittet nedan.
[ Swift 3 ]
func iGotCall(sender: Timer) {
print((sender.userInfo)!)
}
[ Mål - C ]
- (void)iGotCall:(NSTimer*)theTimer {
NSLog (@"%@", (NSString*)[theTimer userInfo]);
}