Выполнение кода в цели c - PullRequest
1 голос
/ 13 мая 2011

Привет всем, если я что-то подобное:

my code....
// active indicator activity
[otherClass method]; // method that takes 5-6 seconds
// disable indicator activity
my code...

Когда вызывается метод long, в моем классе код блокируется, верно?

Если я активирую индикатор активности перед вызовом метода, он будет анимирован во время выполнения «метода»?

Спасибо.

Ответы [ 3 ]

1 голос
/ 13 мая 2011

Как упоминает Iceydee, элементы пользовательского интерфейса (например, индикатор активности) выполняются в главном потоке. Если вы загружаете большой файл, загружаете что-то или что-то другое, что требует времени, вы должны выполнить это в другом потоке, если хотите анимировать элементы пользовательского интерфейса. Вы можете использовать Grand Central Dispatch, executeSelectorInBackGround или другие методы (не рекомендуется). Я бы сделал:

my code....
// active indicator activity
[otherClass performSelectorInBackground:@selector(method) withObject:nil]; // method that takes 5-6 seconds
my code...

Затем в методе otherClass остановите индикатор активности в главном потоке:

[activityIndicator performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:NO];
0 голосов
/ 13 мая 2011

Да, он будет заблокирован, если вы не запустите длинный метод в другом потоке.

Для этого используйте технику, подобную this . см. executeSelectorInBackground и executeSelectorOnMainThread .

0 голосов
/ 13 мая 2011

Следует избегать блокирования основного потока на это время, рассмотрите возможность разбиения метода на два - запуск [метод otherClass] в отдельном потоке. Основной поток используется для обновления пользовательского интерфейса, я не уверен, сможет ли индикатор работать с заблокированным основным потоком.

...