Bloque de animation: la finalización se dispara de inmediato

¿Por qué el siguiente logging de código 'Hecho' tan pronto como se activa?

[UIView animateWithDuration:0.3 animations:^{ NSLog(@"Start"); } completion:^(BOOL finished){ NSLog(@"done"); } ]; 

Porque en realidad no estás animando nada (un NSLog no se puede animar). Necesita animar un object o de lo contrario el bloque de finalización se llamará de inmediato. La duración de 0.3 segundos se ignorará si no hay nada animado.

Porque no estás animando nada. Si cambia el valor de alguna UIView en su bloque de animation, verá correctamente el resultado "hecho" después de la demora de 0.3 segundos.

Probé con un retraso de 5 segundos usando exactamente tu código, solo agregué algo para animar para confirmar.