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