Natknąłem się na ten fragment kodu i nie mogę w pełni zrozumieć, dlaczego autor to zrobił. Spójrz na ten kod:Czy dispatch_async (dispatch_get_main_queue(), ...) jest w tym przypadku konieczne?
someMethodStandardMethodUsingABlock:^() {
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationName:"notif" object:nil];
});
}];
Mam metodę z blokiem zakończenia, aw tym bloku należy wysłać powiadomienie. Nie do końca rozumiem, dlaczego w tym przypadku konieczna jest kolejka główna. Blok zostanie już uruchomiony na głównym wątku, a nawet gdyby tak nie było, nie sądzę, że byłoby to naprawdę ważne? Po prostu napisałbym to:
someMethodStandardMethodUsingABlock:^() {
[[NSNotificationCenter defaultCenter] postNotificationName:"notif" object:nil];
}];
To działa w moich testach.
Jeśli możesz mi w tym pomóc, naprawdę to doceniam!
Matt
Dziękuję David, b wydaje się pasować w moim przypadku. Dokumenty wydają się nie określać, ale czy ma znaczenie, czy powiadomienie jest wysyłane w innym wątku niż ten zarejestrowany obserwator? Rozumiem przez to, że obserwator wciąż osiągnął – MGA
Tak, obserwator nadal otrzyma powiadomienie, nawet jeśli zostanie wysłane w innym wątku. –