Il mio client iPhone ha un sacco di coinvolgimento con richieste asincrone, la maggior parte delle volte modifica in modo consistente raccolte statiche di dizionari o array. Di conseguenza, è comune per me vedere le strutture di dati più grandi che richiedono più tempo per recuperare da un server con i seguenti errori:Uso iPhone di mutex con richieste URL asincrone
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <NSCFArray: 0x3777c0> was mutated while being enumerated.'
Ciò significa in genere che due richieste al server tornare con i dati che stanno cercando di modificare la stessa collezione. Quello che sto cercando è un tutorial/esempio/comprensione di come strutturare correttamente il mio codice per evitare questo errore dannoso. Credo che la risposta corretta sia mutex, ma non li ho mai usati personalmente.
Questo è il risultato di richieste asincrone HTTP con NSURLConnection e quindi di utilizzare NSNotification Center come mezzo di delega una volta che le richieste sono state completate. Quando spariamo richieste che mutano gli stessi set di raccolta, otteniamo queste collisioni.
Il problema è che i thread "in background" non sono stati creati esplicitamente da me. Sono il risultato di richieste NSURLConnection asincrone. Non ho modo di parlare al thread principale tramite codice. I tuoi altri suggerimenti sono comunque utili e lo apprezzo. – Coocoo4Cocoa
Credo che il delegato per NSURLConnection verrà chiamato sul thread che ha avviato l'operazione di caricamento, non necessariamente il thread che ha creato l'oggetto. Quindi potresti coalizzare i dati nei tuoi metodi di delega. – sbooth
Sì! grazie funziona per me – Armanoide