iOS. Приемы программирования
Шрифт:
Обсуждение
Метод performSelectorInBackground: withObject: создает в фоновом режиме новый поток. Ситуация эквивалентна созданию нового потока для селекторов. Самое важное, что в данном случае нужно учитывать: поскольку этот метод создает поток для конкретного селектора, у селектора должен быть
7.17. Выход из потоков и таймеров
Постановка задачи
Требуется остановить поток или таймер либо не допустить его повторного запуска.
Решение
При работе с таймерами пользуйтесь методом экземпляра invalidate, относящимся к классу NSTimer. При работе с потоками используйте метод cancel. Старайтесь не применять метод exit при работе с потоками, так как он не позволяет потоку произвести после себя очистку, что в итоге приводит к утечке ресурсов из вашего приложения.
Обсуждение
Выйти из таймера не составляет труда — можно просто вызвать метод экземпляра invalidate, относящийся к таймеру. После вызова этого метода таймер больше не будет инициировать никаких событий в своем целевом объекте.
А вот выходить из потоков немного сложнее. Когда поток находится в спящем режиме и вызывается его метод cancel, рабочий цикл этого потока выполнит свою задачу, а только потом осуществит выход. Рассмотрим это:
Данный
Итак, ясно видно, что перед выходом поток завершил текущий цикл, хотя запрос о выходе и был дан в середине цикла. Это очень распространенная ловушка. Чтобы избежать ее, нужно сначала проверять, не отменен ли поток, и лишь потом переходить к выполнению какой-либо задачи, для которой свойственны внешние побочные эффекты в цикле потока. Мы можем переписать код следующим образом. При этом операция с внешним эффектом (записыванием в регистрационный журнал) сначала проверяет, не отменен ли поток:
Черный лебедь. Тетралогия
Черный Лебедь
Фантастика:
фэнтези
ужасы и мистика
детективная фантастика
рейтинг книги
Царь Гильгамеш (сборник)
ELITE SERIES
Фантастика:
научная фантастика
альтернативная история
рейтинг книги
Когда физики в цене
Документальная литература:
биографии и мемуары
рейтинг книги
Рэдволл
1. Рэдволл
Детские:
сказки
рейтинг книги
Системный разведчик. Инфильтрация. Дилогия
Системный разведчик
Фантастика:
боевая фантастика
рпг
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Первый среди равных. Книга II
2. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Самоубийство
Проза:
историческая проза
рейтинг книги
Шекспир
Всемирная история в романах
Проза:
историческая проза
рейтинг книги
Розы от киллера
Любовные романы:
остросюжетные любовные романы
рейтинг книги
Дневник (1887-1910)
Проза:
проза прочее
рейтинг книги