2011-08-18 13 views

risposta

4

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.

+0

Un codice di disegno è multi-thread, come CATiledLayer quando è in esecuzione su una CPU multi-core. –

9

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.

+0

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). –

Problemi correlati