2013-02-21 6 views
12

Mam zamiar wprowadzić numer seryjny NSOperationQueue zamiast współbieżny.Jak ustawić numer seryjny NSOperationQueue?

Jednym ze sposobów, co wiem, to:

NSOperationQueue *globalQueue; 
globalQueue.maxConcurrentOperationCount =1; 

Czy jest jakiś inny sposób?

+4

Co jest nie tak z tym sposobem? –

+0

tylko sposób? w inny sposób? – lakesh

+0

Tak, to jedyny sposób. –

Odpowiedz

13

Jeśli chcesz kolejkę szeregową, ustaw prawidłową czynność maxConcurrentOperation na jedną. Możesz także użyć [NSOperationQueue mainQueue] zamiast tworzyć nową kolejkę, a więc wykonywać operacje kolejkowania w głównym wątku. Jest to jednak użyteczne tylko w przypadku dodania bardzo krótkich operacji, aby interfejs użytkownika nie był blokowany. Z drugiej strony nie musisz się martwić o zsynchronizowanie wątków.

Możesz dodawać operacje do dowolnej kolejki z addOperations: waitUntilFinished: TAK lub wysyłając komunikat waitUntilAllOperationsAreFinished za każdym razem, gdy dodajesz operację. W ten sposób operacje serializacji są wykonywane zamiast definiowania kolejki jako seryjnej.

+0

myślisz, że potrzebne jest dodanie łańcucha zależności do każdej operacji? – yershuachu

+3

Nie sądzę, aby ustawienie maxConcurrentOperation na 1 powodowało, że operacje byłyby wykonywane seryjnie, jeśli seryjnie oznacza to, że utrzymana jest kolejność, w której operacje zostały umieszczone w kolejce. Aby zachować zamówienie reklamowe, musisz dodać zależności między operacjami. NSOpeationQueue jest domyślnie współbieżne i kolejność, w której operacje są wybierane do wykonania, nie jest zachowywana. Np .: jeśli operacje są ustawione w kolejce jako 1, 2, 3, 4, to mogą zostać pobrane do wykonania w kolejności 2, 3, 1, 4. –

+0

@KunalShrivastava ma rację. ['Jeśli kolejność wykonywania twoich obiektów operacji jest dla ciebie ważna, powinieneś użyć zależności, aby ustalić tę kolejność przed dodaniem operacji do kolejki.] (Https://developer.apple.com/library/content/documentation/ Ogólne/koncepcyjne/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html # // apple_ref/doc/uid/TP40008091-CH101-SW38) – DanSkeel