Quando si scrive il solito codice del controller di visualizzazione, posso supporre che questo verrà chiamato solo da un singolo thread del ciclo di eventi? Che tipo di classi ho bisogno di rendere thread-safe? Quali sono le solite situazioni in cui sono coinvolti più thread?Quando devo preoccuparmi della sicurezza dei thread in un'applicazione iOS?
risposta
Se si sta scrivendo il codice UIViewController normale, non è necessario preoccuparsi della sicurezza del thread in iOS. In iOS, qualsiasi messaggio relativo all'interfaccia utente dovrebbe essere in esecuzione sul thread principale.
Se non si esegue un messaggio in background da soli, normalmente, non è necessario preoccuparsi del thread, nella maggior parte dei casi, sarà sempre sul thread principale.
P.S. Alcuni Framework come Game Kit eseguiranno alcune volte dei messaggi in background, ma non riguardano l'interfaccia utente e il documento di Apple ti avviserà per assicurarti che il messaggio sia in esecuzione sul thread principale.
Il Concurrency Programming Guide può essere utile.
Il concurrency programming guide è buono. Ecco alcune cose super importanti da tenere a mente.
- È necessario aggiornare solo l'interfaccia utente dal thread principale. Questo può portarti in modi impercettibili ...
- NSNotifiche saranno ricevute nel thread da cui vengono sparate. Quindi, se lanci un thread e ti iscrivi a un NSNotification per attivare un'azione dell'interfaccia utente, dovresti controllare quale thread stai attivando quando lo ottieni. Se non è sul thread principale usa performSelectorOnMainThread di NSObject: withObject: waitUntilDone: per ottenerlo sul thread principale.
- Se si sta disegnando in un contesto non-ui, credo che la grafica di base sia ora al sicuro. (Credo che CATiledLayer faccia qualcosa di intelligente a causa di ciò)
- Generalmente per i controller di visualizzazione, l'unico ciclo di eventi che dovresti prendere in considerazione è quello sul thread principale. Pensaci due volte prima di creare il tuo loop di eventi su un altro thread.
Giusto per confermare, Core Graphics è thread-safe, e CATiledLayer fa tutto ciò che sta disegnando su più thread in background (solo un thread in background se hai una CPU single core). –
- 1. Gli sviluppatori ASP.NET devono davvero preoccuparsi della sicurezza dei thread?
- 2. Devo preoccuparmi del processo nel ciclo foreach
- 3. Sicurezza dei thread con i tag dei modelli
- 4. Sicurezza thread NSMutableDictionary
- 5. Dovrei preoccuparmi della differenza tra thread principale e thread dell'interfaccia utente in Lollipop e oltre?
- 6. Sicurezza dei thread in Python (domanda come funziona)
- 7. Quando devo chiamare setNeedsDisplay in iOS?
- 8. Dovrei preoccuparmi dei riferimenti circolari in Python?
- 9. Metodi di classe e sicurezza dei thread (NSJSONSerialization)
- 10. WPF Sicurezza thread threading?
- 11. Java e XML (JAXP) - Che dire della memorizzazione nella cache e della sicurezza dei thread?
- 12. Che cos'è una pagina in SQL Server e devo preoccuparmi?
- 13. Sicurezza thread in classe Java
- 14. Rubrica sicurezza e prestazioni thread
- 15. Sicurezza thread di JTextArea.append
- 16. Devo preoccuparmi delle condizioni di gara con Javascript asincrono?
- 17. Sicurezza thread per coda STL
- 18. Funzione thread strtok sicurezza
- 19. Sicurezza thread di log4net
- 20. ActiveScaffold thread-sicurezza
- 21. Come eseguire una solida archiviazione locale dei thread in iOS
- 22. middleware rack e sicurezza thread
- 23. C# RabbitMQ Client sicurezza thread
- 24. Come posso garantire la sicurezza dei thread nel seguente contesto?
- 25. Contesto thread sicurezza Spring Security
- 26. Sicurezza thread di ruby / rails
- 27. Devo preoccuparmi di big endian e little endian quando leggo i dati tramite AudioInputStream?
- 28. Sicurezza thread delle mappe C++
- 29. Lavorando con un singleton globale in Flask (WSGI), devo preoccuparmi delle condizioni di gara?
- 30. Dovrei preoccuparmi della frammentazione della memoria con std :: vector?
Un codice di disegno è multi-thread, come CATiledLayer quando è in esecuzione su una CPU multi-core. –