NSOperationQueue con un timer

Me gustaría usar un NSOperationQueue que tiene un timer dentro de él. Por ejemplo, descargo 1 elemento (completa la primera NSOperation ) y luego espero 3 segundos antes de que el comstackdor pase a la siguiente operación. Después de que se completó la segunda NSOperation , quiero que espere los mismos 3 segundos y luego inicie la operación número 3.

¿Cómo puede implementarse este comportamiento? No tengo experiencia previa en el uso de NSTimer o NSRunLoop y no estoy seguro de si debería usarlos en absoluto.

Gracias por adelantado.

Siempre que las operaciones se ejecuten en hilo de background;

Puede establecer maxConcurrentOperationCount en 1 y usar el reposo (3) durante 3 segundos en su bloque de operación.

Use sleep(int secondsToSleep);

El uso de sleep y maxConcurrentOperationCount es todo lo que necesita si solo desea esperar 3 segundos después de que su operación haga algo.

Si necesita algo más complejo, puede usar timeIntervalSinceDate en un ciclo while. Esto es útil si su operación realiza algún process que puede tomar un time indeterminado (en mi caso necesito ejecutar un process de count de creación remota) y desea esperar al less, o como máximo, X segundos antes de ejecutar la siguiente operación en el queue. Puede hacer que las posteriores operaciones NS dependan de la finalización de una operación anterior.

Use addDependency para secuenciar NSOperation para esperar hasta que se complete la operación anterior:

 NSOperationQueue *ftfQueue = [NSOperationQueue new]; // Does this user have an account? // createFTFAccount is subclass of NSOperation. FTFCreateAccount *createFTFAccount = [[FTFCreateAccount alloc]init]; [createFTFAccount setUserid:@"a-user-id"]; [ftfQueue addOperation:createFTFAccount]; // postFTFRoute subclass NSOperation FTFPostRoute *postFTFRoute = [[FTFPostRoute alloc]init]; // Add postFTFRoute with a dependency on Account Creation having finished [postFTFRoute addDependency:createFTFAccount]; [ftfQueue addOperation:postFTFRoute]; 

En la comprobación principal de la subclass NSOperation si la operación ha finalizado o si su toma de time es demasiado larga

 #import <Foundation/Foundation.h> @interface FTFCreateAccount : NSOperation @property (strong,nonatomic) NSString *userid; @end @implementation FTFCreateAccount { NSString *_accountCreationStatus; } - (void)main { NSDate *startDate = [[NSDate alloc] init]; float timeElapsed; ..... ..... ..... // Hold it here until a reply comes back from the account creation process // Or the process is taking too long while ((!_accountCreationStatus) && (timeElapsed < 3.0)) { NSDate *currentDate = [[NSDate alloc] init]; timeElapsed = [currentDate timeIntervalSinceDate:startDate]; } // Code here to do something dependent on _accountCreationStatus value }