Прежде всего, точность намного лучше, чем полсекунды. Мои тесты дают хорошие результаты даже при 100 мс.
Проблема не в задержке срабатывания, а в задержке: по сути, таймеры опрашиваются с определенным интервалом, и если задержка близка к этому интервалу, вы можете столкнуться с проблемами. Например, предположим, что таймеры проверяются каждые 30 мс, и что у вас есть таймер, запланированный на 31 мс. 30 мс спустя, это все еще не связано, поэтому оно не срабатывает; однако следующая проверка будет сделана через 30 мс, и, таким образом, ваш таймер будет срабатывать через 60 мс после его запуска вместо 31.
Если вам действительно нужно лучше, вы можете использовать таймеры Grand Central Dispatch. Однако вы можете получить неоптимальные результаты, если отправляете в основную очередь.