/ / KVO rocks. Jak teraz używać go asynchronicznie? - iPhone, dotyk kakao, obserwowanie wartości klucza, kodowanie wartości klucza

Skały KVO. Jak teraz korzystać z niego asynchronicznie? - iphone, dotyk kakao, obserwacja wartości klucz-wartość, kodowanie wartości klucz-wartość

Jestem sprzedawany na KVO, ale jeśli jest używany w oczywisty sposóbjest synchroniczny. Chciałbym użyć go w sytuacji, gdy szybko odpalam wiele wiadomości KVO i powoduje to zatrzymanie mojej aplikacji podczas obsługi wiadomości KVO. Czy ktoś może zaproponować podejście - być może przy użyciu NSOperation lub NSThread - to zadziała tutaj?

Moim celem jest utrzymanie, w miarę możliwości, oddzielonej od produkcji elastyczności KVO.

Odpowiedzi:

0 dla odpowiedzi № 1

Sprawdź NSNotification. To nie jest dokładnie to samo, ale możesz wystrzelić powiadomienia w wątkach w tle (przy odrobinie badań i pracy). Możesz zachować ładne zachowanie odsprzęgania i ognia i zapomnienia.


13 dla odpowiedzi nr 2

KVO jest z natury rzeczy jednowątkowy, ponieważ powiadomienia KVO będą dostarczane w tym samym wątku co zmiana.

Oczywiście zarówno UIKit, jak i Cocoa naprawdę chcą, abyś robił elementy interfejsu użytkownika w głównym wątku.

Dlatego jeśli wykonujesz operacje asynchroniczne,najprawdopodobniej używasz wątków, a jeśli tak, masz już problem z synchronizacją, ponieważ musisz pobrać powiadomienia z jakiegoś wątku do głównego wątku.

I na tym polega klucz. Zamiast ślepo przekazywać każde powiadomienie o zmianie, gdy się pojawi, możesz łączyć powiadomienia o zmianie przed przekazaniem ich do głównego wątku.

Można to zrobić na wiele sposobów. Prawdopodobnie konkretne rozwiązanie będzie unikatowe dla Twojej aplikacji.

Osobiście staram się unikać koalescencjidrobnoziarnistych operacji. Uważam, że o wiele łatwiej jest powiedzieć głównemu wątkowi, że zmienił się określony podgrupa obiektów. Bardziej prawdopodobne jest, że kod rysunkowy, który sprawi, że zmiany będą widoczne dla użytkownika, będzie musiał ponownie narysować powiązany stan, a zatem powiązane zmiany zostaną automatycznie odzwierciedlone.

Kluczem, jak przypuszczałeś, jest ograniczenie powiadomień, aby nie spowolnić reakcji aplikacji (ani nie zniszczyć żywotności baterii urządzenia).


3 dla odpowiedzi nr 3

Użyj wzoru recepcjonistki zgodnie z zaleceniami Apple https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/ReceptionistPattern/ReceptionistPattern.html