Что такое NSThread в iOS?

«Что такое NSThread в iOS?» — вопрос из категории Многопоточность, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

NSThread — это низкоуровневый класс Objective-C/Swift для создания и управления нативными потоками (threads) вручную.

Основные характеристики:

  • Прямое управление: Полный контроль над жизненным циклом потока (запуск, остановка, приоритет).
  • Не переиспользуется: Каждый поток — тяжелый системный объект. Частое создание дорого.
  • Нет встроенных очередей: В отличие от GCD, не управляет очередями задач.

Пример создания потока:

let thread = Thread {
    print("Выполняем в фоновом потоке")
    Thread.sleep(forTimeInterval: 2.0)
    print("Завершено")
}
thread.name = "MyBackgroundThread"
thread.start()

Недостатки и риски:

  1. Синхронизация: Требует ручной защиты общих данных (мьютексы, блокировки) от состояний гонки (race conditions).
  2. Производительность: Создание многих потоков неэффективно.
  3. Сложность: Легко допустить ошибки, ведущие к deadlock или утечкам памяти.

Когда использовать?

  • Для редких задач, требующих точного контроля над потоком выполнения.
  • При работе с legacy-кодом.
  • В большинстве современных случаев предпочтительнее использовать DispatchQueue (GCD) или OperationQueue — они безопаснее, эффективнее и проще.