Мутирующий массив при чтении, не перечисляя

Если у меня есть два разных потока через GCD доступ кNSMutableArray и один просто создает новый массив на основе изменяемого массива, в то время как другой поток удаляет записи из массива. Должен ли я ожидать, что это будет проблемой? То есть не должна быть копия, которая, как я полагаю, просто «читает»; массив, просто получить то, что происходит в массиве в этот момент? Я не перечисляю массив ни в одном потоке, но он все еще падает. Как только я удаляю процедуру чтения, она работает нормально.

Вот это «прочитано» :

  dispatch_async(saveQueue, ^{

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

Вылетает в этой теме с:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[9]'

Вот что происходит в другой ветке:

[self.data removeObjectForKey:item];

Я знаю, что вы не можете видоизменяться во время перечисления, но я думаю, что было бы нормально читать во время мутации, вы можете не знать, какую версию мутировавшего объекта вы получаете, но я не думаю, что это проблема, но ясно, что это так. , Возможно,dictionaryWithDictionary Метод выполняет операцию, которая сначала видит объекты X, но к тому времени, когда процедура выполнена, она содержит объекты X-Y, таким образом, она не "захватывает" целикомself.data словарь в одно мгновение при запускеdictionaryWithDictionary и вместо этого перечисляетself.data что по существу будет той же проблемой, что и мутация при перечислении?

Ответы на вопрос(3)

Ваш ответ на вопрос