Bucle a través del bloque mientras espera que finalice la ejecución previa.

Tengo un bloque de código que recorre una matriz y realiza un código de locking. Actualmente se ve así:

for (NSString *myString in myArray) { [self doSomethingToString:myString WithCompletion:^(BOOL completion) { string = [NSString stringByAppendingString:@"Test"]; }]; } 

Quiero esperar a que termine la iteración anterior antes de comenzar con la siguiente. ¿Cómo puedo recorrer un código de bloque como este?

Prueba esto

  dispatch_semaphore_t sema = dispatch_semaphore_create(0); for (NSString *myString in myArray) { [self doSomethingToString:myString WithCompletion:^(BOOL completion) { string = [NSString stringByAppendingString:@"Test"]; dispatch_semaphore_signal(sema); }]; dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); dispatch_release(sema); } 

puedes usar

 [myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){ string = [NSString stringByAppendingString:@"Test"]; }]; 

Swift 3.1

 var sema = DispatchSemaphore(value: 0) for myString: String in myArray { doSomething(to: myString, withCompletion: {(_ completion: Bool) -> Void in string = String + ("Test") dispatch_semaphore_signal(sema) }) dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER) dispatch_release(sema) }