[БЕЗ_ЗВУКА] Поздравляем. Вы почти закончили третий блок нашей программы. Подведем итог по полученным знаниям. На первой неделе вы узнали, какие преимущества дает использование многопоточности, а также о сложностях, которые могут при этом возникнуть: Race condition, deadlock, livelock, инверсия приоритетов. На второй неделе мы вкратце рассказали вам о POSIX и NSThread. Теперь вы знаете, как происходит работа с потоками на низкоуровневых API и как синхронизировать потоки с помощью mutex'ов и других средств. Также вы узнали о том, как приложения используют RunLoop для разбора событий, в том числе таймеров. Третья неделя была посвящена Grand Central Dispatch. Вы узнали, чем отличаются последовательные и параллельные очереди, как использовать глобальные очереди и как создавать свои. Мы рассказали о средствах синхронизации в Grand Central Dispatch, таких как семафоры, барьеры и группы. На четвертой неделе мы научились использовать Operation queue. Теперь вы знаете, как использовать простой блок operation и как создавать собственный subclass operation. Кроме того, мы показали, как можно использовать CIFilter с Operation queue. А на пятой неделе мы затронули тему производительности. Теперь вы знаете о Thread Sanitizer и других встроенных в Xcode средствах, помогающих найти ошибки. И, конечно, мы не могли не рассказать об instruments: теперь вы представляете, как использовать их для поиска утечек памяти и проблем с производительностью. Желаем вам дальнейших успехов в обучении. [ЗВУК] [БЕЗ_ЗВУКА]