на говнокоде. В общем, на вьюконтроллере есть много вьюх. И в какой-то момент нужно поверх них показать ещё одну. Сделано это простым добавлением новой сабвьюхи поверх других.
Есть метод, который создаёт эту сабвьюху, высчитывает фрейм и добавляет как сабвьюху.
Во viewDidLoad этот метод вызывается через performSelector:withObject:delay. Дилей 0. Работает корректно.
Я попробовал заменить это на прямой вызов [self addMySubview]. И у меня эта сабвьюха стала рисоваться ПОЗАДИ других сабвьюх. Даже несмотря на вызов bringSubviewToFront.
Вопрос: какая всё таки разница между performSelector:... и прямым вызовом метода? Пробовал гуглить, но ниче дельного никто не говорит.
Разница в том, что 0 не 0
Таймеры в айос работают не совсем ожидаемым способом. У тебя хоть у указана задержка в 0, но код выполниться когда сработает таймер. Это время - минимальное через которое выполнится код, но никто не гарантирует это. Это задание будет добавлено в очередь ранлупа текущего треда и выполниться как только возможно. Это означает что у тебя выполнится весь код во вью дидлоад и потом при вращении ранлупа очередь дойдёт до таймера и он зафейрится вызвав твой код
Обсуждают сегодня