Para realizar una FIFO simple usando nsInvocationopration Usted tendrá que establecer una operación que se dependía de la otra Usando addDependency:. Método
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSInvocationOperation *oper1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSth:) object:@"1"];
NSInvocationOperation *oper2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSth:) object:@"2"];
NSInvocationOperation *oper3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSth:) object:@"3"];
[oper2 addDependency:oper1];
[oper3 addDependency:oper2];
//oper3 depends on oper2 wich depends on oper1
//order of execution will ber oper1->oper2->oper3
//Changing the oreder will not change the result
[queue addOperation:oper2];
[queue addOperation:oper3];
[queue addOperation:oper1];
- (void) doSth:(NSString*)str
{
NSLog(str); //log will be 1 2 3
//When you remove the addDependency calls, the logging result that i got where
//different between consecutive runs i got the following
//NSLog(str); //log will be 2 1 3
//NSLog(str); //log will be 3 1 2
}
Nota: si está utilizando NSInvocationOperation
y después colocar el maxConcurrentOperationCount
a 1 dé más probable es que el truco para usted, ya isReady no será editable por usted
Pero maxConcurrentOperationCount
= 1 no sería una buena solución si estás planeando crear sus propias subclases de NSOperation
Dado que en los derivados NSOperation que podría reemplazar la función isReady
y volver no, (imagina alguna operación que tenga que esperar algunos datos de un servidor a fin de funcionar correctamente) en estos casos que volvería isReady no
hasta que esté realmente listo en estos casos se tendrá que añadir dependencies
entre operations
dentro de la cola de
a partir de documentos de manzana , equivale a una cola de serie . Sin embargo, nunca debe confiar en la ejecución en serie de los objetos de operación. Los cambios en la preparación de una operación pueden cambiar el orden de ejecución resultante
Orden de ejecución también depende de la prioridad de la cola de la operación. – JeremyP
Muy cierto. Actualizado. –
Entonces, si todas mis operaciones tienen la misma prioridad, no tienen dependencias y dependen solo de la implementación de la superclase de 'isReady' (no anulo), ¿debería dar como resultado una cola FIFO? – Barjavel