Matriz mutante al leer, no enumerar

Si tengo dos hilos diferentes a través de GCD accediendo a unNSMutableArray y uno simplemente está creando una nueva matriz basada en la matriz mutable, mientras que la otra cadena está eliminando registros de la matriz, ¿debería esperar que esto sea un problema? Es decir, ¿no debería la copia, que supongo es simplemente "leer" la matriz, solo obtener lo que sea que esté en la matriz en ese momento? No estoy enumerando la matriz en ninguno de los subprocesos, pero todavía está fallando. Tan pronto como elimine la rutina de lectura, funciona bien.

Aquí está la "lectura":

  dispatch_async(saveQueue, ^{

    NSDictionary*tempstocks=[NSDictionary dictionaryWithDictionary:self.data];

Se estrella en este hilo con:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[9]'

Esto es lo que está sucediendo en otro hilo:

[self.data removeObjectForKey:item];

Sé que no se puede mutar mientras se está enumerando, pero creo que estaría bien leer mientras se está mutando, es posible que no se sepa qué versión del objeto mutado se obtiene, pero no creo que esto sea un problema, pero claramente es . Quizás eldictionaryWithDictionary El método es realizar una operación que primero ve objetos X, pero cuando se realiza la rutina, contiene objetos X-Y, por lo tanto, no está "capturando" todo elself.data diccionario en un complemento cuando se ejecutadictionaryWithDictionary y en su lugar está enumerando sobreself.data ¿Cuál sería esencialmente el mismo problema que la mutación mientras que la enumeración?

Respuestas a la pregunta(3)

Su respuesta a la pregunta