setNeedsDisplay не работает в фоновом потоке

Я вызываю метод setNeedsDisplay в новом потоке, но не вижу никаких изменений в своем представлении. Что мне сделать, чтобы увидеть все мои изменения после вызова setNeedsDisplay в новом потоке?


person MrProgrammer    schedule 10.05.2014    source источник
comment
Все обновления пользовательского интерфейса должны вызываться в основном потоке.   -  person rmaddy    schedule 10.05.2014
comment
Многопоточность работает. Есть ли шанс, что вы можете предоставить более описательную подпись?   -  person JensG    schedule 10.05.2014
comment
возможный дубликат Что должно быть в основном потоке?   -  person JensG    schedule 11.05.2014


Ответы (2)


Вы не можете обновить пользовательский интерфейс в фоновом потоке. В фоновом потоке измените

[object setNeedsDisplay];

to

[object performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
person NobodyNada    schedule 10.05.2014

Любые обновления, связанные с пользовательским интерфейсом, должны выполняться в основном потоке. Как правило, фоновые потоки используются для трудоемких задач, таких как загрузка файлов, анализ данных и т. д.

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

После того, как вы обработали все необходимые данные и информацию в фоновом потоке, вы должны зафиксировать любые изменения в пользовательском интерфейсе в соответствии с вашими данными, отправив их в основной поток:

dispatch_async(dispatch_get_main_queue(), ^{
    //do UI stuff
});

Другой способ отправки в основной поток выглядит следующим образом:

[self performSelectorOnMainThread:@selector(doUIStuff:) withObject:stuff waitUntilDone:NO];
person jacob    schedule 10.05.2014