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];
}
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