Matriz mutante durante a leitura, não enumerando

Se eu tiver dois threads diferentes via GCD, acessando umNSMutableArray e um é meramente criar uma nova matriz baseada na matriz mutável enquanto a outra thread está excluindo registros da matriz, devo esperar que isso seja um problema? Ou seja, não deveria a cópia, que eu presumo é apenas "ler" a matriz, apenas obter o que acontece de estar na matriz naquele momento? Eu não estou enumerando a matriz em qualquer segmento, mas ainda está falhando. Assim que eu removo a rotina de leitura, tudo funciona bem.

Aqui está a "leitura":

  dispatch_async(saveQueue, ^{

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

Ele trava neste segmento com:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[9]'

Aqui está o que está acontecendo em outro segmento:

[self.data removeObjectForKey:item];

Eu sei que você não pode sofrer uma mutação durante a enumeração, mas eu acho que seria bom ler enquanto estiver em mutação, você pode não saber qual versão do objeto mutado você obtém, mas eu não acho que isso seja um problema, mas claramente é . Talvez odictionaryWithDictionary método está executando uma operação que primeiro vê objetos X, mas quando a rotina é feita ela contém objetos X-Y, portanto, não está "capturando" todo o objeto.self.data dicionário em um piscar de olhos quando é executadodictionaryWithDictionary e, em vez disso, está enumerandoself.data qual seria essencialmente o mesmo problema que a mutação enquanto enumeração?

questionAnswers(3)

yourAnswerToTheQuestion