Tablica mutacji podczas czytania, nie wyliczająca

Jeśli mam dwa różne wątki za pośrednictwem GCD dostęp doNSMutableArray a jeden polega po prostu na utworzeniu nowej tablicy opartej o zmienną tablicę, podczas gdy drugi wątek usuwa rekordy z tablicy, czy powinienem oczekiwać, że będzie to problem? To znaczy, czy kopia, która, jak przypuszczam, po prostu „czyta” tablicę, po prostu nie dostanie się w tym momencie do tablicy? Nie wyliczam tablicy w żadnym wątku, ale wciąż się zawiesza. Po usunięciu procedury odczytu działa dobrze.

Oto „czytaj”:

  dispatch_async(saveQueue, ^{

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

W tym wątku zawiesza się:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[9]'

Oto, co dzieje się w innym wątku:

[self.data removeObjectForKey:item];

Wiem, że nie można mutować podczas wyliczania, ale myślę, że byłoby dobrze czytać podczas mutacji, może nie wiesz, którą wersję zmutowanego obiektu otrzymasz, ale nie sądzę, że jest to problem, ale wyraźnie to jest . Możliwe żedictionaryWithDictionary metoda wykonuje operację, która najpierw widzi obiekty X, ale do czasu zakończenia procedury zawiera obiekty X-Y, więc nie „przechwytuje” całegoself.data słownik w jednym naciśnięciu, gdy działadictionaryWithDictionary i zamiast tego wyliczaself.data który zasadniczo byłby tym samym problemem co mutacja podczas wyliczania?

questionAnswers(3)

yourAnswerToTheQuestion