в target-c, сон происходит перед кодом до него - PullRequest
0 голосов
/ 13 января 2012

В этом коде кажется, что сон происходит перед сокрытием кнопки.Почему это так?

-(void)buttonPressed{
        NSLog(@"Button pressed!");
        button.hidden=true;
        sleep(rand()%10);
        NSLog(@"out of sleep!");
    }

Ответы [ 4 ]

8 голосов
/ 13 января 2012

Установка «скрытого» происходит немедленно и запускает SetNeedsDisplay, который идет по циклу выполнения.Тогда метод спит.Затем после сна выполняется цикл выполнения, и дисплей обновляется.Так что просто режим сна не позволяет обновлять дисплей до тех пор, пока он не закончится.

1 голос
/ 13 января 2012

Я не обладаю какими-либо конкретными знаниями по этому вопросу, но это общий случай, когда пользовательский интерфейс является однопоточным, а обновление состояния кнопки помещается в очередь для выполнения.Затем вызов в режим сна приостанавливает всю текущую активность потока и поэтому останавливает обновление пользовательского интерфейса.

1 голос
/ 13 января 2012

Я предполагаю, что свойство hidden было успешно установлено, но экран не обновлялся, потому что вы приостановили поток.

Обновление экрана произойдет позже.

0 голосов
/ 13 января 2012

SetNeedsDisplay, по сути, устанавливает флаг, который будет вызывать повторную визуализацию элемента управления в следующий раз вокруг цикла пользовательского интерфейса.Это не вступит в силу немедленно, так как обычно оно немного задерживается, так что различные обновления пользовательского интерфейса могут быть объединены.

Выполнение вызова sleep () в потоке пользовательского интерфейса действительно вызывает недовольство ... если выжелая выполнить какое-то действие через несколько секунд после сокрытия вашей кнопки, я бы порекомендовал вызвать performSelector:withObject:afterDelay: в соответствии с этим потоком:

Как использовать executeSelector: withObject: afterDelay: с примитивамиКакао?

В общем, вы хотите, чтобы блок потока пользовательского интерфейса был как можно меньше, так как любой код блокировки (например, спящий режим) приведет к задержке пользовательского интерфейса, как правило, не отвечает илипляжный мяч (SPoD).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...