Cocoa-Touch - руководство по тому, какой поток выполнять обновления GUI - PullRequest
0 голосов
/ 07 ноября 2011

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

setBadgeValue: из UITabBarItem?

Или

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]

В ссылке на класс этоне указано, могут ли эти методы выполняться в неосновном потоке.

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Общее правило заключается в том, что вы должны хранить обновления UIKit в главном потоке, если только UIKit не вызывает вашу реализацию из другого потока.

Ссылка : Важно: Классы UIKit, как правило, не являются поточно-ориентированными. Все связанные с рисованием операции должны выполняться в главном потоке вашего приложения.

Из примечаний к выпуску iOS 4:

  • Рисование в графическом контексте в UIKit теперь является потокобезопасным. В частности: Процедуры, используемые для доступа к графическому контексту и манипулирования им, теперь могут корректно обрабатывать контексты, находящиеся в разных потоках.
  • Рисование строк и изображений теперь поточно-ориентировано.
  • Использование объектов цвета и шрифта в нескольких потоках теперь безопасно.

С этой информацией, и если я или кто-то еще не выкопает больше документов (которые я отсканировал примечания к выпуску и больше не видел):

setBadgeValue: UITabBarItem?

Предположим, что безопасно звонить только из основного потока.

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]

Предположим, что безопасно звонить только из основного потока.

0 голосов
/ 07 ноября 2011

Можно также назвать их в главном потоке, просто чтобы быть уверенным.

...