Jabłko Threading przewodnik mówi:Czy istnieje sposób wprowadzania wielowątkowego kakao bez tworzenia fałszywego NSThread?
przypadku aplikacji wielowątkowych, ramy Kakao używać zamki i inne formy synchronizacji wewnętrznej w celu zapewnienia, że zachowują się poprawnie. Aby jednak zapobiec sytuacji, w której te blokady nie obniżają wydajności w przypadku jednowątkowego, Cocoa nie tworzy ich, dopóki aplikacja nie uruchomi swojego pierwszego nowego wątku przy użyciu klasy NSThread. Jeśli spawnujesz wątki używając tylko wątków POSIX, Cocoa nie otrzyma powiadomień, których potrzebuje, aby wiedzieć, że twoja aplikacja jest teraz wielowątkowa. W takim przypadku operacje obejmujące framugi Cocoa mogą zdestabilizować lub zawiesić aplikację.
Aby Cocoa wiedział, że zamierzasz używać wielu wątków, wystarczy odradzić jeden wątek za pomocą klasy NSThread i pozwolić, aby ten wątek natychmiast się zakończył. Twój punkt wejścia wątku nie musi nic robić. Wystarczy akt tarowania wątku za pomocą NSThread, aby zapewnić, że blokady wymagane przez ramy Cocoa są wprowadzone.
W mojej aplikacji na iOS uruchamiam kilka pthreadów z kodu C++ od samego początku. Aby upewnić się, że aplikacja zachowuje się prawidłowo, zgodnie z powyższym dokumentem tworzę fałszywe NSThread, które nie robi nic. Nie lubię tworzyć takiego bezużytecznego kodu (zwykle jest to WTF, kiedy po raz pierwszy go czytasz) i chcę tego uniknąć. Czy istnieje lepszy sposób na umieszczenie mojej aplikacji w trybie wielowątkowym?
Pomoże to zobaczyć kod w miejscu tworzysz NSThread. Czy dzwonisz "start" w wątku? – pzearfoss