Мой клиент iPhone имеет большое участие в асинхронных запросах, много времени постоянно изменяя статические коллекции словарей или массивов. В результате для меня обычно наблюдаются более крупные структуры данных, которые занимают больше времени, чтобы извлечь их с сервера со следующими ошибками:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <NSCFArray: 0x3777c0> was mutated while being enumerated.'
Обычно это означает, что два запроса на сервер возвращаются с данными, которые пытаются изменить одну и ту же коллекцию. То, что я ищу, - это учебник/пример/понимание того, как правильно структурировать мой код, чтобы избежать этой вредной ошибки. Я верю, что правильный ответ - это мьютексы, но я никогда их лично не использовал.
Это результат создания асинхронных HTTP-запросов с NSURLConnection, а затем использования NSNotification Center в качестве средства делегирования после завершения запросов. При отмене запросов, которые мутируют одни и те же коллекции, мы получаем эти столкновения.