2013-01-11 29 views
10

Próbuję zrozumieć NSOperationQueue i próbuję stworzyć najprostszy możliwy przykład. Mam następujący:Czy istnieje sposób dodawania bloków do NSOperationQueue, tak jak to

NSOperationQueue *myOQ=[[NSOperationQueue alloc] init]; 

[myOQ addOperationWithBlock:^(void){ 
    NSLog(@"here is something for jt 2"); 
}]; 
[myOQ addOperationWithBlock:^(void){ 
    NSLog(@"oh is this going to work 2"); 
}]; 

Ale chciałbym to zrobić:

void (^jt)() = ^void(){ 
    NSLog(@"here is something for jt"); 
}; 

void (^cl)() = ^void(){ 
    NSLog(@"oh is this going to work"); 
}; 

NSOperationQueue *myOQ=[[NSOperationQueue alloc] init]; 

[myOQ addOperation:jt]; 
[myOQ addOperation:cl]; 

Czy ta ostatnia forma jest możliwe? Czy mogę przekonwertować blok na NSOperation?

thx z góry

+0

Nie, to nie będzie działać, ale dlaczego ty jeszcze chcesz to zrobić? Co próbujesz osiągnąć? –

+0

Ucząc się z prostym przykładem: było to również pomocne, ale przeczytaj też komentarze http://eng.pulse.me/concurrent-downloads-using-nsoperationqueues/ – timpone

Odpowiedz

28

Mogłabyś:

NSBlockOperation *jtOperation = [NSBlockOperation blockOperationWithBlock:^{ 
    NSLog(@"here is something for jt"); 
}]; 

NSBlockOperation *clOperation = [NSBlockOperation blockOperationWithBlock:^{ 
    NSLog(@"oh is this going to work"); 
}]; 

[myOQ addOperation:jtOperation]; 
[myOQ addOperation:clOperation]; 

powiedziawszy, ja generalnie zrobić addOperationWithBlock chyba że naprawdę potrzebował NSOperation obiektów wskazówek dla jakiegoś innego powodu (np ustalenie zależności między operacjami itp.).

+0

thx za odpowiedź! – timpone

2

Można również zrobić

[operationQueue addOperationWithBlock:^{ 
    // Stuff 
})]; 
1

Swift

let networkingOperation = NSBlockOperation(block: { 
          // Your code here 
          }) 
+1

Twoje rozwiązanie jest kuszące, ale nigdy nie powinieneś używać funkcji 'NSBlockOperation' owijającej funkcję _asynchronous_, takiej jak żądanie sieciowe. Raczej poprawnie podklasę 'NSOperation'. 'NSOperationQueue' służy do wykonywania zadań asynchronicznych, takich jak instancje' NSOperation'. "NSBlockOperation" jest po prostu pomocnikiem, w którym można wykonać operację _synchronous_. W takim przypadku prawie zawsze lepiej byłoby korzystać z kolejek wysyłkowych. – CouchDeveloper

Powiązane problemy