Gibt es eine Möglichkeit, diese Nachricht zu senden, um anzugeben, dass meine Auswahl nach allen ausstehenden Benutzeroberflächenereignissen lieber ausgeführt wird, falls vorhanden? Ie. Geben Sie meinem aterDelay-Timer in der Ereigniswarteschlange eine niedrigere Priorität.perfomSelector: withObject: afterDelay: Kann ich nach einer niedrigen Priorität fragen?
Antwort
Nicht direkt. Wenn Sie performSelector:withObject:afterDelay:
verwenden, wird der Selektor auf dem Hauptthread ausgeführt, so per Definition wird es auftreten, nachdem alle aktuellen "ausstehenden" UI-Ereignisse durchgeführt wurden - aber das könnte in der Mitte einer Bildlauf oder Animation sein, die Sie wahrscheinlich würden Betrachten Sie als ein kontinuierliches Ereignis, aber ist eigentlich Hunderte von separaten.
Sie können jedoch etwas Ähnliches erreichen, indem Sie performSelectorInBackground:withObject:
verwenden und dann in der aufgerufenen Methode [NSThread setThreadPriority:0.01]
aufrufen. Seien Sie vorsichtig - Sie öffnen einen Hintergrund-Thread, sodass Sie keine Benutzeroberflächen-Aufrufe ausführen können. Dies ermöglicht Ihnen jedoch die Arbeit an einem Hintergrund-Thread mit einer niedrigeren Priorität als der Haupt-UI-Thread. (Denken Sie daran, einen Autorelease-Pool einzurichten, da er in einem eigenen Thread ist!)
Eigentlich muss performSelector:withObject:afterDelay:
nicht notwendigerweise auf dem Hauptthread auftreten; deshalb gibt es eine separate Methode performSelectorOnMainThread:withObject:waitUntilDone:
. Die Dokumentation für performSelector:withObject:afterDelay:
sagt
Ruft eine Methode des Empfängers auf dem aktuellen Thread des Standardmodus nach einer Verzögerung verwendet wird.
Wenn Sie eine Aufgabe im Hintergrund ausführen möchten, können Sie in +[NSThread detachNewThreadSelector:toTarget:withObject:]
suchen, die einen neuen Thread starten wird Ihre Aufgabe auszuführen, und lassen Sie die Benutzeroberfläche reaktionsschnell. Die Verwendung eines separaten Threads zum Ausführen einer lang andauernden Aufgabe, die andernfalls Ihre Benutzeroberfläche blockieren könnte, ist im Allgemeinen eine gute Idee, erhöht jedoch die Komplexität. Wenn Sie mit Threading nicht vertraut sind, können Sie mit Fehlern enden, die keinen Sinn ergeben.
In einem Kommentar oben haben Sie erwähnt, dass Sie der Meinung sind, dass die Animation einen Fehler verursachen kann, weil Ihre Benutzeroberfläche nicht mehr reagiert. Wenn Sie die integrierte Unterstützung für Animation (Core Animation oder einen der Cocoa-Wrapper) verwenden, sollte die UI durch die Animation nicht reagieren. Eine nicht reagierende Benutzeroberfläche bedeutet in der Regel, dass Ihr Programm eine Menge Arbeit am Hauptthread ausführt, bevor die Ausführungsschleife zu Servicebenutzeroberflächenereignissen zurückkehren kann.
- 1. Blöcke statt performSelector: withObject: afterDelay:
- 2. Wie funktioniert -performSelector: withObject: afterDelay: funktioniert?
- 3. performSelector: withObject: afterDelay: funktioniert nicht von scrollViewDidZoom
- 4. iPhone dev - performSelector: withObject: afterDelay oder NSTimer?
- 5. performSelector: withObject: afterDelay funktioniert nicht innerhalb der viewDidLoad Methode
- 6. iphone: performSelector: withObject: afterDelay: funktioniert nicht mit einem Hintergrund-Thread?
- 7. Sortieraufgaben nach Priorität
- 8. Clickonce nach einer Lizenzvereinbarung fragen
- 9. Wie sortiere ich dieses Array nach Priorität
- 10. Gruppe nach Priorität
- 11. Sollten Sie nach einer Eingabe fragen oder nach einer Änderung globaler Variablen in der Skriptdatei fragen?
- 12. Wie kann ich mit Python 3.x nach Benutzereingaben fragen?
- 13. dispatch_after versus performSelector afterDelay
- 14. Wie kann ich Text in div niedrigen Opazität in HTML
- 15. gitolite user nach passwort fragen
- 16. Wie kann ich nach einer Erhöhung des Registrierungszugriffs auf HKLM fragen?
- 17. Wie kann ich Maven nach einer Liste der Standard-Repositories fragen?
- 18. Java Executors: Wie kann ich Task-Priorität festlegen?
- 19. Fragen Sie nach einem Entwurfsmuster
- 20. Symfony2 Sammlungsreihenfolge nach Priorität Schalter Plätze
- 21. Sortieren nach Namen in SQL in Priorität
- 22. Abrufen der Nachricht nach Priorität von MSMQ
- 23. Beim Job nach Zeit fragen
- 24. C# Fragen mehrere Fragen in einer Schleife
- 25. Sound Sampling bei niedrigen Frequenzen
- 26. Referenz-Konvertierungsoperatoren: Fragen nach Ärger?
- 27. Filtering Fragen nach Antwort Graf
- 28. Fragen über "null" nach ersetzen
- 29. Kann ich Speicherleckage von C++ Code fragen?
- 30. Kann ich die Priorität eines Prozesses in Erlang ändern?
Danke. Wenigstens kann ich jetzt keinen roten Hering jagen. Ich werde in die Unterdrückung der Animation schauen, da ich einen Verdacht habe, der meine Benutzeroberfläche manchmal nicht mehr anspricht. –