🕹 В App Store разрешили эмуляторы ретро-игр
Теперь разработчики могут выкладывать и такой тип приложений, а пользователи iPhone смогут устанавливать себе эмуляторы напрямую из App Store, а не использовать для этого сторонние магазины приложений, которые ранее разрешили в ЕС.
До этого любые эмуляторы игр были под запретом. Единственным вариантом было юзать джейлбрейк или искать альтернативные пути.
Важная деталь — эмуляторы должны соответствовать остальным правилам, включая запрет на пиратские игры.
📖 Детально изменения гайдлайнов здесь.
😃 iOS Dev
Теперь разработчики могут выкладывать и такой тип приложений, а пользователи iPhone смогут устанавливать себе эмуляторы напрямую из App Store, а не использовать для этого сторонние магазины приложений, которые ранее разрешили в ЕС.
До этого любые эмуляторы игр были под запретом. Единственным вариантом было юзать джейлбрейк или искать альтернативные пути.
Важная деталь — эмуляторы должны соответствовать остальным правилам, включая запрет на пиратские игры.
📖 Детально изменения гайдлайнов здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Method swizzling в Swift: определение, примеры, плюсы и минусы
Method swizzling — это техника, которая позволяет изменять или заменять реализацию существующего метода в рантайме.
Она включает в себя обмен реализациями двух методов, обычно для добавления или изменения поведения без модификации исходного класса.
😎 Firebase, пожалуй, самый известный SDK, который юзает свиззлинг. Например, FirebaseAnalytics изменяет методы жизненного цикла в
Pulse изменяет инициализатор URLSession для трекинга сетевой активности, проходящей через URLSession.
А в целом, пул применения можно расширить до следующих примеров:
1️⃣ Расширение или изменение поведения существующих методов во фреймворках или сторонних либах.
2️⃣ Отладка или логирование, например, отслеживание вызовов или измерение производительности.
3️⃣ Аутентификация или кэширование, в нескольких методах или классах.
✅ В ноушне я добавил примеры кода, плюсы и минусы (и когда лучше избегать этого способа), а также несколько полезнейших источников для того, чтоб разобраться с Method Swizzling.
😃 iOS Dev
Method swizzling — это техника, которая позволяет изменять или заменять реализацию существующего метода в рантайме.
Она включает в себя обмен реализациями двух методов, обычно для добавления или изменения поведения без модификации исходного класса.
UIViewController
для отправки событий аналитики.Pulse изменяет инициализатор URLSession для трекинга сетевой активности, проходящей через URLSession.
А в целом, пул применения можно расширить до следующих примеров:
1️⃣ Расширение или изменение поведения существующих методов во фреймворках или сторонних либах.
2️⃣ Отладка или логирование, например, отслеживание вызовов или измерение производительности.
3️⃣ Аутентификация или кэширование, в нескольких методах или классах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Apple показал Ferret-UI для распознавания мобильных интерфейсов
После обучения на собранных массивах данных Ferret-UI демонстрирует отличное понимание интерфейса и способность выполнять открытые инструкции.
Ferret-UI не только превосходит большинство опенсорсных MLLM, но и превосходит GPT-4V по всем элементарным UI-задачам.
🔗 Целиком исследование доступно здесь.
Вероятно, как минимум, это расширит области по работе с доступностью для определённых групп пользователей, а как максимум, может приведёт нас к этому.
К слову, у гугла есть также есть объёмное исследование для работы с интерфейсом.
😃 iOS Dev
После обучения на собранных массивах данных Ferret-UI демонстрирует отличное понимание интерфейса и способность выполнять открытые инструкции.
Ferret-UI не только превосходит большинство опенсорсных MLLM, но и превосходит GPT-4V по всем элементарным UI-задачам.
Вероятно, как минимум, это расширит области по работе с доступностью для определённых групп пользователей, а как максимум, может приведёт нас к этому.
К слову, у гугла есть также есть объёмное исследование для работы с интерфейсом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Benchmark - инструмент для измерения производительности Swift
Производительность, безусловно, ключевая характеристика и для приложений, и для фреймворков.
Benchmark позволяет легко чекать множество показателей: загрузку процессора, ARC-трафика, использование памяти, ресурсов оси, таких как потоки и системные вызовы, а также полностью кастомные счетчики метрик.
Его основная функция - именно замер производительности, а другие средства (Instruments, DTrace, Heaptrack, Leaks, Sample) могут быть использованы для поиска причин.
🛠 Вот тут есть сылка на репозиторий и статья с примерами на сайте swift.org.
📖 А вот здесь в канале разбор инструмента от ETTrace от Emerge.
✅ А в iOS IQ есть огромный раздел c советами по повышению производительности приложений (как бороться с лагами, шаги по поиску утечек и многое другое).
😃 iOS Dev
Производительность, безусловно, ключевая характеристика и для приложений, и для фреймворков.
Benchmark позволяет легко чекать множество показателей: загрузку процессора, ARC-трафика, использование памяти, ресурсов оси, таких как потоки и системные вызовы, а также полностью кастомные счетчики метрик.
Его основная функция - именно замер производительности, а другие средства (Instruments, DTrace, Heaptrack, Leaks, Sample) могут быть использованы для поиска причин.
🛠 Вот тут есть сылка на репозиторий и статья с примерами на сайте swift.org.
📖 А вот здесь в канале разбор инструмента от ETTrace от Emerge.
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание серчбара в стиле Apple
⭐️ Каждый, кто работал с эпловским серчбаром, знает, как сложно было хэндлить разные кейсы до выхода последних версий iOS, особенно если используется непростая кастомизация.
Во многих приложениях Apple для visionOS, таких как Music, Safari и Apple TV, также есть удобное поле поиска.
Но начиная с версии visionOS 1.1, повторить его визуальное исполнение непросто из-за отсутствия нужного API, хотя и все равно возможно!
📖 В этом материале разработчик объясняет, как можно для этих целей использовать UISearchBar из UIKit (и делится неочевидными сложностями).
😃 iOS Dev
Во многих приложениях Apple для visionOS, таких как Music, Safari и Apple TV, также есть удобное поле поиска.
Но начиная с версии visionOS 1.1, повторить его визуальное исполнение непросто из-за отсутствия нужного API, хотя и все равно возможно!
📖 В этом материале разработчик объясняет, как можно для этих целей использовать UISearchBar из UIKit (и делится неочевидными сложностями).
Please open Telegram to view this post
VIEW IN TELEGRAM
Cтруктурные шаблоны (structural patterns) — шаблоны проектирования, в которых рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры.
Проще говоря, этот вид паттернов связан с композицией объектов или тем, как сущности могут использовать друг друга.
Что к ним можно отнести?
- Адаптер.
- Мост.
- Компоновщик.
- Декоратор.
- Фасад.
- Flyweight (приспособленец/легковес).
- Прокси.
В iOS IQ я уже писал о том, почему удобная архитектура == более гибкий и лёгкий в поддержке код.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как быстро создать privacy manifest для приложения
Уже сейчас при заливке билдов в аппсторе есть соответствующее уведомление, а начиная с мая можно получить реджект, если не будет соответствующего манифеста.
Мик Бирн посчитал не слишком удобным, как это сделано сейчас в Xcode (поиск причин вручную) и реализовал собственную тулзу для генерации таких файлов (бесплатно и в открытом доступе).
🔗 Создать собственный манифест можно с помощью этого ресурса.
😃 iOS Dev
Уже сейчас при заливке билдов в аппсторе есть соответствующее уведомление, а начиная с мая можно получить реджект, если не будет соответствующего манифеста.
Мик Бирн посчитал не слишком удобным, как это сделано сейчас в Xcode (поиск причин вручную) и реализовал собственную тулзу для генерации таких файлов (бесплатно и в открытом доступе).
Please open Telegram to view this post
VIEW IN TELEGRAM
Блок вопросов: многопоточность (и бонус)
В iOS IQ на сегодня больше 10 крупных разделов (от алгоритмов до архитектур), каждый из которых постоянно обновляется, несколько сотен статей и множество реальных примеров кода.
На выходных я провёл редизайн некоторых секций, и теперь вопросы будут вынесены более явно.
Цель — собрать не только теорию, не только код, но и вопросы, которые требуют размышлений. Ведь все мы знаем, что правильно заданное направление (или вопрос) позволяет решить задачу уже на автоматизме.
Сейчас в этом разделе уже 20 вопросов, начиная от GCD и заканчивая async/await. А в разделе с вопросами на чтение кода ещё больше.
Каждая тема подкреплена материалами для изучения, с которых следует начать подготовку.
🍏 ➡️ Секретная ссылка со скидкой здесь (количество активаций ограничено). [UPDATE] Добавил несколько дополнительных после запросов
Скоро будет дополнительный анонс по развитию контента, рекомендую подписаться заранее, чтобы не пропустить.
😃 iOS IQ
В iOS IQ на сегодня больше 10 крупных разделов (от алгоритмов до архитектур), каждый из которых постоянно обновляется, несколько сотен статей и множество реальных примеров кода.
На выходных я провёл редизайн некоторых секций, и теперь вопросы будут вынесены более явно.
Цель — собрать не только теорию, не только код, но и вопросы, которые требуют размышлений. Ведь все мы знаем, что правильно заданное направление (или вопрос) позволяет решить задачу уже на автоматизме.
Сейчас в этом разделе уже 20 вопросов, начиная от GCD и заканчивая async/await. А в разделе с вопросами на чтение кода ещё больше.
Каждая тема подкреплена материалами для изучения, с которых следует начать подготовку.
Скоро будет дополнительный анонс по развитию контента, рекомендую подписаться заранее, чтобы не пропустить.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 Веб-распространение приложений для iOS в ЕС уже доступно
Ранее Apple анонсировали эту возможность для Европы при выполнении определённых требований (ждём и для стран СНГ?) .
🎆 А с сегодняшнего дня фича уже доступна в iOS 17.5 (beta 2) и в App Store Connect для разработчиков, про требования можно почитать здесь.
😃 iOS Dev
Ранее Apple анонсировали эту возможность для Европы при выполнении определённых требований (ждём и для стран СНГ?) .
Please open Telegram to view this post
VIEW IN TELEGRAM
Использование собственного голоса в приложении iOS
Функция преобразования текста в речь существует на iOS уже более десяти лет, но в iOS 17 Apple добавила несколько новых функций, которые могут стать интересным дополнением к вашему приложению.
Конечно, для этого понадобится
📖 В этой статье рассказано, как использовать AVSpeechSynthesizer, чтобы подключить системные, новые, и даже «персональный голос», созданный с помощью ИИ!
😃 iOS Dev
Функция преобразования текста в речь существует на iOS уже более десяти лет, но в iOS 17 Apple добавила несколько новых функций, которые могут стать интересным дополнением к вашему приложению.
Конечно, для этого понадобится
AVSpeechSynthesizer
. Кстати, список novelty-голосов можно посмотреть вот тут (Accessibility > Live Speech > Voices, посмотрите как-нибудь, если не видели ранее).📖 В этой статье рассказано, как использовать AVSpeechSynthesizer, чтобы подключить системные, новые, и даже «персональный голос», созданный с помощью ИИ!
Please open Telegram to view this post
VIEW IN TELEGRAM
Четыре полезных сервиса для работы с JSON в Swift
1️⃣ quicktype.io — удобный сервис для создания моделей и сериализации JSON (не только на Swift) с кучей опций и параметров.
2️⃣ SwiftyJSON — популярнейший репозиторий на GitHub для упрощения работы с JSON (22 000 звёзд).
3️⃣ jsonformatter.org — валидатор и конвертер для JSON.
4️⃣ jsoncrack.com — наглядная визуализация структуры json (есть ещё вот сервис, но он временно недоступен).
😃 iOS Dev
1️⃣ quicktype.io — удобный сервис для создания моделей и сериализации JSON (не только на Swift) с кучей опций и параметров.
2️⃣ SwiftyJSON — популярнейший репозиторий на GitHub для упрощения работы с JSON (22 000 звёзд).
3️⃣ jsonformatter.org — валидатор и конвертер для JSON.
4️⃣ jsoncrack.com — наглядная визуализация структуры json (есть ещё вот сервис, но он временно недоступен).
Please open Telegram to view this post
VIEW IN TELEGRAM
Поведенческие паттерны в Swift: определение, использование, недостатки
В них включают паттерны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.
Например, с помощью паттерна Chain of Responsibility можно передавать запросы последовательно по цепочке (отсюда и название).
А вот дальше каждый последующий обработчик решит, может ли он обработать запрос (или его нужно передать дальше).
Паттерн Command превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций (так что популярные действий Undo во многих приложениях использует именно этот паттерн).
Вообще, согласно банде четырёх к таким паттернам относятся:
- Цепочка обязанностей.
- Команда.
- Интерпретатор.
- Итератор.
- Посредник.
- Хранитель (он же memento).
- Наблюдатель.
- Состояние.
- Стратегия.
- Шаблонный метод.
- Посетитель.
Каждый их них представляет собой решение общей проблемы проектирования и может быть использован для создания более эффективных, удобные в обслуживании и масштабируемых приложений.
🍏 В iOS IQ уже разобраны некоторые из паттернов (с кодом, примерами использования, и полезными репозиториями, и пока что действует промо ).
⬆️ О структурных паттернах проектирования можно почитать тут.
😃 iOS IQ
В них включают паттерны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.
Например, с помощью паттерна Chain of Responsibility можно передавать запросы последовательно по цепочке (отсюда и название).
А вот дальше каждый последующий обработчик решит, может ли он обработать запрос (или его нужно передать дальше).
Паттерн Command превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций (так что популярные действий Undo во многих приложениях использует именно этот паттерн).
Вообще, согласно банде четырёх к таким паттернам относятся:
- Цепочка обязанностей.
- Команда.
- Интерпретатор.
- Итератор.
- Посредник.
- Хранитель (он же memento).
- Наблюдатель.
- Состояние.
- Стратегия.
- Шаблонный метод.
- Посетитель.
Каждый их них представляет собой решение общей проблемы проектирования и может быть использован для создания более эффективных, удобные в обслуживании и масштабируемых приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как использовать экспериментальные версии (и функции) Swift в Xcode?
Если вы любите читать о том, что нового появилось в Swift, или узнавать обо всех грядущих крутых новинках, часто хочется попробовать эти фичи самостоятельно.
Иногда действительно придётся подождать, но часто в пропозалах можно встретить следующее:
Это говорит нам о том, что если зайти в Swift непосредственно из main-ветки, можно протестить эту фичу, установив нужный флаг компилятора.
Например, release/5.10 or release/6.0 показывает, что функция будет доступна только при использовании Swift из этой ветки.
📖 В этом материале можно почитать не только об установке альтернативного тулчейна для Xcode, но и об использовании экспериментальных фич.
😃 iOS Dev
Если вы любите читать о том, что нового появилось в Swift, или узнавать обо всех грядущих крутых новинках, часто хочется попробовать эти фичи самостоятельно.
Иногда действительно придётся подождать, но часто в пропозалах можно встретить следующее:
-enable-experimental-feature
Это говорит нам о том, что если зайти в Swift непосредственно из main-ветки, можно протестить эту фичу, установив нужный флаг компилятора.
Например, release/5.10 or release/6.0 показывает, что функция будет доступна только при использовании Swift из этой ветки.
📖 В этом материале можно почитать не только об установке альтернативного тулчейна для Xcode, но и об использовании экспериментальных фич.
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезные материалы для подготовки к секции System Design
В отличие от частей, затрагивающих алгоритмы и лайвкодинг, на секции проектирования нет понятия решил/не решил задачу.
В канале вы можете найти пост, что именно этот раздел собеседований помогает определить более опытного разработчика.
В iOS IQ я не только структурирую источники знаний, но и получаю ценнейшие комментарии от коллег, в том числе помогающие углубить некоторые направления.
Сегодня я хотел бы поделиться частью источников для подготовки к System Design:
🔗 Пять видео по системному дизайну от разработчика, проходившего собесы в MANGA.
🔗 Собеседование на Senior-разработчика с Александром Зиминым, основной упор на System Design (открытое видео с канала Podlodka).
🔗 Разбор архитектурной секции с Mobius (в тегах не iOS, но это не главное).
🔗 Разбор собеседований по System Design от человека с опытом 300+ интервью с кандидатами на хабре.
🔗 Разбор проблем проектирования iOS-приложения на реальных примерах.
✅ Подписывайтесь на iOS IQ, чтобы посмотреть на сложности проектирования с разных точек зрения и узнать больше (а ещё там есть разбор других важных секций).
😃 iOS IQ
В отличие от частей, затрагивающих алгоритмы и лайвкодинг, на секции проектирования нет понятия решил/не решил задачу.
В канале вы можете найти пост, что именно этот раздел собеседований помогает определить более опытного разработчика.
В iOS IQ я не только структурирую источники знаний, но и получаю ценнейшие комментарии от коллег, в том числе помогающие углубить некоторые направления.
Сегодня я хотел бы поделиться частью источников для подготовки к System Design:
Please open Telegram to view this post
VIEW IN TELEGRAM
Так ли нужен MVVM для разработки SwiftUI-приложений?
Автор следующей статьи показывает свою точку зрения, отличную от общепринятой. Но, конечно, на самом деле ни один паттерн или архитектура не может покрыть все потребности — всегда есть компромиссы.
Именно поэтому важно знать и об альтернативных вариантах, чтобы принять правильное решение при разработке.
📖 В частности, в своем рассуждении он отвечает на следующие вопросы:
1️⃣ Что делать с тем, что логика будет во Views, ведь это плохая практика?
2️⃣ Как быть с тестированием без View Model?
3️⃣ Если это сработает с маленькими приложениями, то как быть с более крупными проектами?
🛠 Кстати, вот тут есть коллекция самых разных архитектур на Github.
🍏 А вот здесь есть множество примеров и разборов реализаций, их преимуществ и недостатков.
😃 iOS Dev
Автор следующей статьи показывает свою точку зрения, отличную от общепринятой. Но, конечно, на самом деле ни один паттерн или архитектура не может покрыть все потребности — всегда есть компромиссы.
Именно поэтому важно знать и об альтернативных вариантах, чтобы принять правильное решение при разработке.
📖 В частности, в своем рассуждении он отвечает на следующие вопросы:
1️⃣ Что делать с тем, что логика будет во Views, ведь это плохая практика?
2️⃣ Как быть с тестированием без View Model?
3️⃣ Если это сработает с маленькими приложениями, то как быть с более крупными проектами?
🛠 Кстати, вот тут есть коллекция самых разных архитектур на Github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Погружение в макросы Swift
Макросы Swift впервые были представлены на WWDC 23, и хотя это не новая концепция в программировании в целом, она привнесла полезные опции для Swift-разработчиков.
Они позволяют настраивать язык Swift в соответствии с нашими потребностями и распространять их среди других разработчиков без изменения кода компилятора.
📖 В этом разборе показаны принципы работы макросов, а также настройка и использование на простом примере.
🔗 Кстати, в канале есть и ещё несколько примеров создания.
😃 iOS Dev
Макросы Swift впервые были представлены на WWDC 23, и хотя это не новая концепция в программировании в целом, она привнесла полезные опции для Swift-разработчиков.
Они позволяют настраивать язык Swift в соответствии с нашими потребностями и распространять их среди других разработчиков без изменения кода компилятора.
📖 В этом разборе показаны принципы работы макросов, а также настройка и использование на простом примере.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подробный разбор модификаторов Overlay и Background в SwiftUI
В инструментарии SwiftUI overlay и background играют незаменимую роль в различных сценариях разработки.
📖 В этой статье рассмотрены не только их уникальные атрибуты, но и разбираются фундаментальные отличия от ZStack, а также показаны примеры сценариев, для которых они предназначены.
🤩 А вот тут есть интерактивный помощник, в котором можно посмотреть отличия прямо в браузере.
😃 iOS Dev
В инструментарии SwiftUI overlay и background играют незаменимую роль в различных сценариях разработки.
📖 В этой статье рассмотрены не только их уникальные атрибуты, но и разбираются фундаментальные отличия от ZStack, а также показаны примеры сценариев, для которых они предназначены.
Please open Telegram to view this post
VIEW IN TELEGRAM
Эффективный способ загрузки больших изображений в основном потоке
В подавляющем большинстве случаев нам подойдёт вариант:
Но вот если картинка действительно крупная, то это может визуально подвесить приложуху на какое-то время.
Особеннно это проявится, например, при работе с коллекциями.
В таком случае можно справедливо обратиться к документации (и к совету Винсента), в которых говорится о том, что всё-таки есть ещё один способ.
🐱 prepareForDisplay декодирует нашу картинку в фоновом потоке, и уже после этого можно использовать результат из completionHandler.
Важно не забыть вернуться в основной поток, конечно же.
Или использовать
🍏 Кстати, большое количество материалов в базе знаний поможет быстрее разобраться со Swift Concurrency.
😃 iOS Dev
В подавляющем большинстве случаев нам подойдёт вариант:
let image = UIImage(named: "big-image")
imageView.image = image
Но вот если картинка действительно крупная, то это может визуально подвесить приложуху на какое-то время.
Особеннно это проявится, например, при работе с коллекциями.
В таком случае можно справедливо обратиться к документации (и к совету Винсента), в которых говорится о том, что всё-таки есть ещё один способ.
Важно не забыть вернуться в основной поток, конечно же.
Или использовать
Task
, если вы уже перевели (или переводите проект для Swift Concurrency).Please open Telegram to view this post
VIEW IN TELEGRAM
Создание приложения-чата, используя StreamChat SDK и SwiftUI
🛠 SDK на Github включает в себя приличный набор высокопроизводительных и настраиваемых компонентов интерфейса.
📖 А в этой статье приводится пример настройки (около 100 строк кода на полностью рабочее приложение).
Добавлю, что SDK и пример приложения позволят познакомиться с чатом, но при собственной реализации будут ожидать совсем другие сложности. Например, как приложение будет справляться с сотнями сообщений в секунду (поверьте, бывает и такое), и как при этом будет себя вести интерфейс. Впрочем, это совсем другая история😎
😃 iOS Dev
🛠 SDK на Github включает в себя приличный набор высокопроизводительных и настраиваемых компонентов интерфейса.
📖 А в этой статье приводится пример настройки (около 100 строк кода на полностью рабочее приложение).
Добавлю, что SDK и пример приложения позволят познакомиться с чатом, но при собственной реализации будут ожидать совсем другие сложности. Например, как приложение будет справляться с сотнями сообщений в секунду (поверьте, бывает и такое), и как при этом будет себя вести интерфейс. Впрочем, это совсем другая история
Please open Telegram to view this post
VIEW IN TELEGRAM
Dispatch Barrier, потокобезопасность и почему слишком много очередей это плохо
Параллельные и последовательные очереди помогают нам управлять выполнением задач, а вместе с этим позволяют нашим приложениям работать быстрее, эффективнее и с улучшенной отзывчивостью.
Мы можем легко создавать очереди, используя класс DispatchQueue, который построен на основе GCD.
🔒 Dispatch Barrier представляет собой механизм синхронизации задач в очереди.
Если по дефолту очередь работает параллельно, то после добавления флага
Уже после этого очередь выполнит нашу задачу, помеченную барьером, самостоятельно, и вернётся к обычному режиму работы.
🍏 В iOS IQ я добавил мощный материал, который поможет разобраться с барьерами на примерах. Постарался вынести не только плюсы, но и возможные минусы чрезмерного использования, и почему оптимизация может оказаться обманчивой.
А ещё там есть несколько десятков вопросов, доступных уже сейчас.
➡️ Подписаться можно здесь.
😃 iOS Dev
Параллельные и последовательные очереди помогают нам управлять выполнением задач, а вместе с этим позволяют нашим приложениям работать быстрее, эффективнее и с улучшенной отзывчивостью.
Мы можем легко создавать очереди, используя класс DispatchQueue, который построен на основе GCD.
Если по дефолту очередь работает параллельно, то после добавления флага
.barrier
такая задача будет отложена, пока не выполнятся все остальные. Уже после этого очередь выполнит нашу задачу, помеченную барьером, самостоятельно, и вернётся к обычному режиму работы.
А ещё там есть несколько десятков вопросов, доступных уже сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM