Когда вы убиваете свое приложение, ОС отправляет его SIGKILL. Обычно это убивает ваше приложение, но поскольку к нему подключен отладчик, приложение приостанавливается, чтобы дать вам возможность отладить причину сигнала (вероятно, должно быть исключение для SIGKILL, но это не большая проблема, что нет не один).
При повторном запуске SpringBoard (домашний экран) замечает, что приложение не умерло, и переключается на него. [1] На данный момент, ничего не поделаешь, так как приложение приостановлено. Я думаю SpringBoard обрабатывает неотвечающее приложение, отправляя SIGKILL и ожидая, пока приложение не умрет, но GDB все еще подключен, ваше приложение все еще приостановлено, и ничего не происходит.
В этот момент я обычно нажимаю кнопку остановки XCode, или, если это не работает (потому что XCode 4 является неисправным POC), отключаю телефон.
И если вам интересно, почему SpringBoard не просто игнорирует старый экземпляр вашего приложения и порождает новый: может быть запущен только один экземпляр. Приложения делают это постоянно (например, нет другого экземпляра вашего приложения, обращающегося к его базе данных), и я почти уверен, что есть что-то в пространствах имен портов / начальной загрузки Mach / что-то, что означает, что ваше приложение не запустится, если есть другое копирование выполняется (или если часть системы считает, что ваше приложение все еще работает, потому что не удалось выполнить очистку).
В более старой версии ОС, если ваше приложение потратило много времени, делая что-то при выходе (например, сохраняя), выход и быстрое «перезапуск» приложения переключились бы на приложение «в процессе выхода». , и приложение завершит работу, и начальный экран внезапно появится. Я забыл, в какой версии ОС я видел это, но я думаю, что это исправлено.