Будет ли система отправлять NSWillBecomeMultiThreadedNotification, когда я создаю потоки POSIX?

StackOverflow https://stackoverflow.com/questions/1608230

  •  05-07-2019
  •  | 
  •  

Вопрос

Я попробовал, но думаю, что это уведомление не приходит. Это нормальный случай?

Это было полезно?

Решение

Нет, это уведомление отправлено NSThread . Если вы используете обычные потоки, они не будут отправлены.

Другие советы

От документы :

  

Защита рамок какао для   многопоточные приложения, какао   рамки используют замки и другие формы   внутренней синхронизации для обеспечения   они ведут себя правильно. Предотвращать   эти замки от унизительной производительности   в однопоточном случае, однако,   Какао не создает их, пока   приложение порождает свой первый новый   поток с использованием класса NSThread. Если   вы порождаете темы, используя только POSIX   подпрограммы потока, какао не   получать уведомления, необходимые для   знать, что ваше приложение сейчас   многопоточный. Когда это произойдет,   операции с участием какао   рамки могут дестабилизировать или потерпеть крах   ваше заявление.

     

Чтобы сообщить Какао, что вы собираетесь   использовать несколько потоков, все что вам нужно   сделать это создать один поток, используя   Класс NSThread и пусть этот поток   немедленно выйти. Ваша тема   Дык не нужно ничего делать. Просто   акт порождения потока с помощью   NSThread достаточно, чтобы обеспечить   замки, необходимые для структур Какао   ставятся на место.

     

Если вы не уверены, что Какао думает   ваше приложение многопоточное или   нет, вы можете использовать isMultiThreaded   метод NSThread для проверки.

Следует также отметить, что «времена изменились» с тех пор, как NSWillBecomeMultiThreadedNotification был добавлен в Foundation . Многопоточное программирование сейчас намного, гораздо более распространено. Теперь вполне возможно, даже вероятно, что вы никогда не увидите это уведомление в приложении. Современные приложения становятся многопоточными очень рано, возможно, еще до того, как какая-либо часть вашего кода будет выполнена. Также из документации:

  

Если вы разрабатываете библиотеку Какао,   Вы можете зарегистрироваться в качестве наблюдателя для      <Код> NSWillBecomeMultiThreadedNotification   если вы хотите получать уведомления, когда   приложение становится многопоточным. Вы   не следует полагаться на получение этого   уведомление, как бы то ни было   отправляется до того, как код вашей библиотеки   когда-либо звонил.

Я бы использовал [NSThread isMultiThreaded] вместо того, чтобы полагаться на NSWillBecomeMultiThreadedNotification .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top