2010-09-17 4 views
5

Mam długą operację O, która jest wywoływana przez NSInvocationOperation, sama zaplanowana przez dodanie go do NSOperationQueue, tak aby działał asynchronicznie. Ta długa operacja O jest wywoływana w dwóch różnych przypadkach w mojej aplikacji.Poważne spowolnienie za pomocą NSInvocationOperation (NSOperation) z NSOperationQueue na iOS 4 (iPhone)

W przypadku A operacja O jest wywoływana w wyniku dotknięcia niektórych widżetów w pewnym widoku. Zaraz po dotknięciu widgetu operacja O działa przez pewien czas (widzę to dzięki wskaźnikowi UIActivityIndicator), ale nie spowalnia ani nie blokuje interfejsu użytkownika, dzięki czemu mogę korzystać z innych widżetów i wykonywać inne operacje interfejsu użytkownika podczas gdy operacja O jest uruchomiona.

W przypadku B, operacja O jest wywoływana w wyniku otrzymania lokalnego powiadomienia, w metodzie didReceiveLocalNotification delegowanej aplikacji. W tym przypadku operacje UI wykonywane zaraz po wywołaniu operacji O, pozostając w metodzie didReceiveLocalNotification, są znacznie spowolnione, w zasadzie do przeszukiwania, prawie tak, jakby operacja O przejęła procesor.

Dlaczego tak jest i jaki byłby właściwy sposób wywołania operacji O w przypadku B, tak aby rzeczywiście działał równolegle w tle z niższym priorytetem, pozostawiając resztę kodu w metodzie didReceiveLocalNotification, aby uruchomić normalna prędkość?

UWAGA: Operacja O odsiewa z lokalnymi powiadomieniami (usuwanie istniejących lub planowanie nowych) i kalendarzy (wysyłanie zapytań do magazynu zdarzeń w celu lepszego planowania lokalnych powiadomień).

Odpowiedz

0

Czy próbowałeś obniżyć priorytet wątku?

To będzie działać tylko na iOS 4, ale możesz wywołać metodę setThreadPriority na NSInvocationOperation.

Powiązane problemy