Heim  >  Artikel  >  Mehrere verzögerte Ausführungsmethoden unter iOS

Mehrere verzögerte Ausführungsmethoden unter iOS

(*-*)浩
(*-*)浩Original
2019-12-24 09:43:222997Durchsuche

Mehrere verzögerte Ausführungsmethoden unter iOS

Der verzögerte Aufruf von Methoden wird häufig in der Projektentwicklung verwendet. Die spezifischen Aufrufszenarien werden im Folgenden nicht im Detail beschrieben. Methode:

Methode 1: performSelector                                                                                                                                                                              Der nicht blockierende Ausführungsmodus hat keine Auswirkungen auf andere Prozesse und muss im Hauptthread ausgeführt werden 🎜> kann den Vorgang aktiv abbrechen:

[self performSelector:@selector(delayMethods) withObject:nil afterDelay:1.0];

Wenn Sie alle aktuellen Verzögerungsvorgänge abbrechen möchten:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethods) object:nil];
Hinweis: Diese Methode ist nicht sicher genug. Diese Methode stellt beim Aufruf den Timer im aktuellen Runloop ein. Wir wissen jedoch, dass nur der Hauptthread automatisch einen Runloop ausführt und standardmäßig einen Timer enthält, wenn er erstellt wird. Gewöhnliche untergeordnete Threads verfügen nicht über Runloops und Timer.

Wenn der Verzögerungsoperationscode in unserem Code also in einem untergeordneten Thread aufgerufen wird, wartet er immer darauf, dass der Timer geplant wird. Tatsächlich gibt es jedoch keinen Timer im untergeordneten Thread, was zu unserer Verzögerung führt Die Aktion Code wird nie ausgeführt.

Methode 2: NSTimer

[NSObject cancelPreviousPerformRequestsWithTarget:self];

Analyse:

Diese Methode ist eine nicht blockierende Ausführungsmethode, die keine Auswirkungen auf andere Prozesse hat Im Hauptthread ausgeführt. Standardmäßig wird im Hauptthread ein Timer festgelegt. Sie können festlegen, ob der Verzögerungsvorgang wiederholt werden soll:

NSTimer *timer =  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(delayMethods) userInfo:nil repeats:NO];

Hinweis:

Wenn der Wiederholungsparameter auf NEIN gesetzt ist, wird der Timer nach Abschluss der Ausführung automatisch zerstört. Wenn der Wiederholungsparameter auf JA gesetzt ist, wird nach Abschluss der Ausführung [. timer invalidate] muss manuell aufgerufen werden, um den Timer zu zerstören.

Methode 3: schlafen

[timer invalidate];

Analyse:

Diese Methode ist eine blockierende Ausführungsmethode Es ist am besten, es in einem untergeordneten Thread auszuführen, da es sonst die Ausführung anderer Methoden beeinträchtigt.

Methode 4: GCD

[NSThread sleepForTimeInterval:1.0];

Analyse:

Diese Methode ist eine nicht blockierende Ausführungsmethode, die keine Auswirkungen auf andere Prozesse hat in den Parametern verwendet Legen Sie den Ausführungsprozess fest in:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self delayMethods];
});

Sie können auch festlegen, ob wiederholt ausgeführt werden soll:

dispatch_queue_t queen = dispatch_get_global_queue(0, 0);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), queen, ^{
[self delayMethods];
});

Hinweis:

weil diese Methode wird automatisch von GCD verarbeitet, daher ist es nicht einfach, den Vorgang abzubrechen

Das obige ist der detaillierte Inhalt vonMehrere verzögerte Ausführungsmethoden unter iOS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn