Если вы хотите визуализировать это, я мог бы использовать отладчик. Например, я установил точку останова внутри подкласса NSThread
и вижу поток, указанный на левой панели в Xcode:
Но если у меня есть другая точка останова, срабатывающая через одну секунду после завершения метода main
, я вижу соответствующее сообщение «Поток завершится», и моя нить больше не присутствует:
Или вы можете добавить оператор NSLog
внутри метода dealloc
для вашего подкласса NSThread
, и это также продемонстрирует его освобождение. Или ищите подкласс в графе объекта отладочной памяти.
Что ж, обработчик уведомлений не вызывается.
Я бы предложил добавить наблюдателя для NSThreadWillExitNotification
перед вами. начать свою тему. Прямо сейчас у вас есть условие гонки между началом и выходом из этой нити и добавлением наблюдателя. Кстати, я вижу сообщение «Поток выйдет».
Не имеет отношения, хотя это здорово, узнать о потоках и циклах выполнения, в настоящее время оно мало практично. Возможно, было бы более полезно освоить GCD, который выводит нас из потока потоков и предлагает оптимизацию производительности и более богатый API для написания надежного многопоточного кода.
Относительно того, создает ли GCD постоянные потоки или нет, ответ - да, но мы отвлечены от этой детали. Но одна из оптимизаций производительности GCD заключается в том, что она управляет «пулом» потоков для нас, а не постоянно раскручивает новые потоки и постоянно уничтожает их для каждого отправленного блока кода.
Возможно, вы захотите посмотреть WWD C 2016 Параллельное программирование с GCD в Swift 3 . Он просматривает отношения между очередями, потоками и циклами выполнения.