5

Wykonuję wiele asynchronicznych operacji z blokami w mojej aplikacji.Jak zabić wszystkie wątki, które nie są głównym wątkiem?

Ale muszę zabić wszystkie wątki, które nie są główną nić, jeśli pewne zdarzenie pojawi się w mojej aplikacji.

Czy możliwe jest zatrzymanie wykonywania wszystkich bloków? Lub innymi słowy, zabić wszystkie wątki, które nie są głównym wątkiem?

PS: Próbowałem wykonać bloki wewnątrz NSOperationQueue, ale moja pierwsza operacja nie rozpoczyna się w odpowiednim czasie, podczas gdy następują.

Odpowiedz

4

Jeśli chcesz zabić wątki, aby anulować operacje, prawdopodobnie robisz to źle. NSOperationQueue lub podobne rozwiązanie (np. Implementacja logiki anulowania w blokach) jest IMHO właściwą drogą. Jeśli masz problemy z kolejką operacji, spróbuj to rozwiązać, nie unikaj problemu, tworząc gorzej.

+0

Mój widok wyświetla obrazy, a ja zaczynam od ładowania ich miniaturek i asynchronicznie, ładuję rzeczywiste zdjęcie i zaraz po załadowaniu jest ono wyświetlane zamiast miniatury. Jeśli jednak użytkownik ma ciężkie zdjęcie, które wczytuje w tle i przesunie palcem do następnego zdjęcia, poprzednie ciężkie zdjęcie będzie nadal ładowane w tle, a jeśli nowe zdjęcie będzie niewielkie, ładowanie ciężkiego zdjęcia zakończy się po zastępuje nowe zdjęcie w widoku. Tak więc w moim kodzie starałem się zatrzymać wszystkie wątki tła, gdy użytkownik przesuwał do następnego zdjęcia. To mój problem. –

+0

To klasyczny przypadek użycia, który nie wymaga zabijania żadnych wątków. Proponuję, aby zaimplementować ładowanie obrazu jako anulowaną operację 'NSOperation' i anulować ładowanie obrazu, gdy obraz nie jest już potrzebny. – zoul