/ / w cel-c, sen się dzieje przed kodem przed nim - cel-c

w cel-c, sen ma miejsce przed kodem przed nim - cel-c

W tym kodzie wydaje się, że sen ma miejsce przed ukryciem przycisku. Dlaczego?

-(void)buttonPressed{
NSLog(@"Button pressed!");
button.hidden=true;
sleep(rand()%10);
NSLog(@"out of sleep!");
}

Odpowiedzi:

8 dla odpowiedzi № 1

Ustawienie "ukrytego" dzieje się natychmiast i uruchamia a SetNeedsDisplay który przechodzi do pętli uruchamiania. Następnie metoda śpi. Następnie po zakończeniu uśpienia wykonywana jest pętla uruchomieniowa, a wyświetlacz jest aktualizowany. Po prostu sen powoduje, że wyświetlacz nie jest aktualizowany do końca snu.


1 dla odpowiedzi nr 2

Domyślam się, że tak hidden Właściwość została pomyślnie ustawiona, ale ekran nie został zaktualizowany, ponieważ zatrzymałeś wątek.

Aktualizacja ekranu nastąpi później.


1 dla odpowiedzi nr 3

Nie mam żadnej konkretnej wiedzy o celuw tym punkcie - ale jest to częsty przypadek, w którym interfejs użytkownika jest pojedynczy wątek i że aktualizacja stanu przycisku jest umieszczona w kolejce do wykonania. Wywołanie trybu uśpienia powoduje zawieszenie wszystkich bieżących wątków, a tym samym wstrzymanie aktualizacji interfejsu użytkownika.


0 dla odpowiedzi nr 4

SetNeedsDisplay zasadniczo ustawia flagę, która będziespowodować, że kontrola zostanie ponownie wyświetlona następnym razem wokół pętli interfejsu użytkownika. Nie przyniesie to natychmiastowego skutku, ponieważ zazwyczaj opóźnia się nieco, dzięki czemu różne odświeżenia interfejsu użytkownika mogą zostać połączone.

Wykonywanie wywołania sleep () w wątku UI jest naprawdę marszczeniem brwi ... jeśli chcesz ukryć swój przycisk po wykonaniu czynności n ms, polecam wywołanie performSelector:withObject:afterDelay:, jak w tym wątku:

Jak korzystać z performSelector: withObject: afterDelay: z typami pierwotnymi w kakao?

Ogólnie rzecz biorąc, chcesz mieć blok wątków interfejsu użytkownika tak mało, jak to tylko możliwe, ponieważ każdy kod blokujący (np. Uśpienie) spowoduje opóźnienie interfejsu użytkownika, generalnie brak reakcji lub piłkę plażową (SPoD).