Он работает, но работает асинхронно, и вы просто выходите из своего приложения, прежде чем оно сможет завершиться. Если вы попробуете это в приложении с графическим интерфейсом, которое остается активным, пока пользователь не завершит работу вручную, вы увидите, что оно ведет себя так, как вы ожидали.
Если вы делаете это в приложении командной строки, вы можете использовать группы рассылки для ожидания завершения отправки кода, например:
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t defaultPriority = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_async(group, defaultPriority, ^{
for (int i = 0; i < 10; i++) {
[NSThread sleepForTimeInterval:0.7];
NSLog(@"current i = %d", i);
}
});
NSLog(@"Waiting");
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
NSLog(@"All done");
Обычно вы этого не делаетев большинстве приложений с графическим интерфейсом, но если вы действительно хотите, чтобы приложение командной строки дожидалось завершения отправленного кода, это сделает работу.
Кстати, знаете ли вы, что sleepForTimeInterval
использует секунды, а не миллисекунды? Возможно, вы намеревались использовать 0,7 секунды, а не 700 секунд?