Как сказал UIAdam в своем комментарии, __block
здесь ничего не делает для вас; Вы изменяете словарь, а не присваиваете переменную. Переменная будет продолжать указывать на один и тот же словарь навсегда.
На самом деле, __block
может на самом деле причинить вам боль, поскольку это означает, что переменная не будет захвачена блоком. Если вы не используете ARC, это означает, что словарь не будет сохранен, и блок может вскоре отправить сообщения мертвому объекту. Я не уверен, случайно ли ARC это меняет. В любом случае вы должны оставить __block
вне этой переменной; если ничего другого, код более четко выражает ваши намерения без него.
Что касается вашего реального вопроса о безопасности потоков, этот код не является безопасным. Согласно Сводке по безопасности потоков , классы изменяемой коллекции не являются поточно-ориентированными: вы должны отправлять сообщения в изменяемую коллекцию не более чем из одного потока за раз. Синхронизация будет одним из способов; установка максимального числа одновременных операций в очереди в 1 будет другим.