2013-03-19 13 views
8

Nella mia app iOS, sto lavorando su un thread in background (usando performSelectorInBackground). In questa discussione, io sto usando NSJSONSerialization e dei suoi metodi di classe ad analizzare una stringa JSON:Metodi di classe e sicurezza dei thread (NSJSONSerialization)

self.json = [NSJSONSerialization JSONObjectWithData:self.data options:0 error:nil]; 

È questo il metodo di classe (JSONObjectWithData) thread-safe? Posso esserne sicuro? Dove è scritto nella documentazione?

So che i metodi di istanza sono in genere non thread-safe a meno che i documenti non lo siano. Posso dire in generale che i metodi di classe sono thread-safe, se non diversamente specificato?

+0

Il modo migliore è quello di rendere il funzionamento in parallelo su [NSJSONSerialization JSONObjectWithData:] chiamare, e vedere se avete problema rientranza. Se nessuno ti dice che è thread-safe, allora non è thread-safe;) –

+0

Sfortunatamente sembra che il documento che descrive la sicurezza del thread non sia stato aggiornato per mostrare 'NSJSONSerialization'. http://developer.apple.com/library/ios/#Documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html –

+0

Vuoi usare self.json, se lo fai thread-safe allora funzionerà? – Exploring

risposta

-1

Il contenuto gestito non è sicuro. È possibile eseguire il codice sul mainthread o eseguirlo in background e utilizzare NSNotificationCenter per avviare il ricaricamento dell'interfaccia utente quando viene eseguito il thread in background.

+2

La domanda (a quanto ho capito) era se è sicuro chiamare '[NSJSONSerialization JSONObjectWithData: ...]' da più thread contemporaneamente, non sulla modifica dell'interfaccia utente da un thread in background. –

1

Sono un po 'indovinando qui.

I Threading Programming Guide stati

Oggetti immutabili sono generalmente thread-safe; una volta creati, è possibile trasferire in modo sicuro questi oggetti da e verso i thread, .

Chiamare un metodo di classe significa inviare un messaggio all'oggetto classe e gli oggetti di classe sono immutabili. La mia conclusione sarebbe che è sicuro chiamare metodi di classe da diversi punti.

+1

A meno che il metodo di classe non coinvolga lo stato globale, che può essere difficile da determinare. –

Problemi correlati