2013-09-05 32 views

Odpowiedz

3

Jak par Jabłko doc NSInvocationOperation i NSBlockOperation Oba są podklasą NSOperation

NSInvocationOperation Class

Klasa NSInvocationOperation to konkretny podklasa NSOperation który zarządza wykonanie pojedynczego kapsułkach zadania określonego jako pw. Za pomocą tej klasy można zainicjować operację polegającą na wywołaniu selektora na określonym obiekcie. Ta klasa implementuje zakaz jednoczesnego działania


NSBlockOperation Class

Klasa NSBlockOperation jest beton podklasa NSOperation który zarządza współbieżne wykonanie jednego lub kilku bloków. Możesz użyć tego obiektu do wykonania kilku bloków naraz bez konieczności tworzenia oddzielnych obiektów operacji dla każdego. Podczas wykonywania więcej niż jednego bloku, sama operacja jest uznawana za zakończoną dopiero po zakończeniu wszystkich bloków.

Bloki dodane do operacji blokowej są wysyłane z domyślnym priorytetem do odpowiedniej kolejki roboczej. Same bloki nie powinny przyjmować żadnych założeń dotyczących konfiguracji środowiska wykonawczego.

3

NSOperation jest klasą podstawową. Wszystkie operacje rozszerzają NSOperation. Jest to jednak klasa abstrakcyjna, co oznacza, że ​​należy ją podklasować i zaimplementować kod, który wykonuje faktyczną operację.

Jednak w prostych przypadkach (tworzenie własnych podklas) nie jest konieczne.

Jeśli chcesz tylko przekazać wiadomość do obiektu, możesz użyć NSInvocationOperation. Jest to implementacja NSOperation, którą można sparametryzować za pomocą selektora i obiektu docelowego.

Jeśli chcesz zadzwonić jeszcze jeden blok, możesz użyć NSBlockOperation. Jest to implementacja NSOperation, którą można sparametryzować za pomocą bloku do wywołania.

27

NSBlockOperation exectues a block. NSInvocationOperation wykonuje NSInvocation (lub metodę zdefiniowaną przez cel, selektor, obiekt). NSOperation musi być podklasowany, oferuje największą elastyczność, ale wymaga większości kodu.

NSBlockOperation i NSInvocationOperation są podklasami NSOperation. Są one dostarczane przez system, więc nie musisz tworzyć nowej podklasy dla prostych zadań.

Używanie NSBlockOperation i NSInvocationOperacja powinna wystarczyć dla większości zadań.


Oto przykładowy kod do korzystania z wszystkich trzech, które robią dokładnie to samo:

// For NSOperation subclass 
@interface SayHelloOperation : NSOperation 
@end 

@implementation SayHelloOperation 

- (void)main { 
    NSLog(@"Hello World"); 
} 

@end 

// For NSInvocationOperation 
- (void)sayHello { 
    NSLog(@"Hello World"); 
} 


- (void)startBlocks { 
    NSBlockOperation *blockOP = [NSBlockOperation blockOperationWithBlock:^{ 
     NSLog(@"Hello World"); 
    }]; 
    NSInvocationOperation *invocationOP = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(sayHello) object:nil]; 
    SayHelloOperation *operation = [[SayHelloOperation alloc] init]; 

    NSOperationQueue *q = [[NSOperationQueue alloc] init]; 
    [q addOperation:blockOP]; 
    [q addOperation:invocationOP]; 
    [q addOperation:operation]; 
} 
+1

Byłoby miło, jeśli stosowany inny tekst w każdej operacji, aby oddzielić je od siebie zamiast "Hello World" w kółko. Tylko sugestia – c0d3Junk13