Процесс на уровне операционной системы
Как видите, вся "работа" приведенного выше класса, какой бы она ни была, разделяется на ряд мелких частей. Код этого класса предназначен лишь для имитации некоторых медленно выполняемых операций, и ни один из его методов не делает ничего такого, что вообще отнимало бы сколько-нибудь времени. Однако самое интересное, что каждый его метод содержит вызов метода sleepForTimelnterval: из класса NSThread, благодаря чему данное приложение, а точнее, поток, из которого этот метод вызывается, по существу, приостанавливается, ничего не делая в течение промежутка времени, заданного в секундах. Кроме того, в начале и в конце метода doWork: содержится код для расчета времени, потребовавшегося на выполнение всей работы.
Теперь откройте файл SlowWorkerViewController.xib и перетащите объекты Round Rect Button и Text View из библиотеки в пустое окно View, расположив их так. Нажмите клавишу
Сохраните результаты своих трудов и выберите команду Build & Run в среде Xcode. Приложение должно запуститься на выполнение, и если вы нажмете кнопку Start Working!, то в течение примерно десяти секунд, т.е. суммарного времени ожидания, будет выполняться задание, прежде чем на экране появятся результаты. Ожидая этих результатов, обратите внимание на то, что кнопка Start Working ( остается все это время темно-синей и не возвращается в свое обычное состояние до тех пор, пока задание не будет выполнено. Кроме того, текстовое представление данного приложения никак не реагирует до тех пор, пока не будет выполнено задание. Постукивание пальцем по любому участку экрана не дает никакого результата. В действительности единственный способ взаимодействия с приложением в течение всего этого времени состоит в том, чтобы стукнуть пальцем по кнопке возврата в исходное состояние, чтобы выйти из данного приложения. Однако именно этой ситуации нам и хотелось бы избежать! В данном конкретном случае это не так уж и плохо, поскольку приложение словно зависает на несколько секунд. Однако если ваше приложение регулярно зависает подобным образом намного дольше, то его применение на практике доставит одно разочарование. В самом худшем случае ваше приложение может быть удалено как отдельный процесс на уровне операционной системы, если оно не будет реагировать слишком долго. В любом случае вы наживете себе недовольных пользователей вашего приложения, а возможно, и потеряете их доверие!
- Дата: 31-12-2014, 16:45