С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
andrei0077
6 / 6 / 0
Регистрация: 23.06.2011
Сообщений: 92
1

Как сделать, чтобы методы выполнялись последовательно

09.10.2012, 12:42. Просмотров 1083. Ответов 9
Метки нет (Все метки)

Добрый день! У меня есть контролер, в нём 2 метода: добавление графики и загрузка данных с сервера. Когда я перехожу в этот контролер, то графика в нём загружается не сразу, а немного подвисает, пока идет загрузка с сервера. Я поставил небольшую задержку для загрузки с сервера, чтоб дать графике загрузиться. Тогда всё стало последовательно и подвисание исчезло. Но ставить задержку - это же не выход. Как сделать, чтобы методы выполнялись последовательно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 12:42
Ответы с готовыми решениями:

Как сделать, чтобы текст букв изменялся как в караоке?
Может ли кто-то подсказать: как сделать так, чтобы в текстовом окне, текст,...

Как сделать, чтобы скрол работал во все стороны?
как сделать так чтобы скрол работал во все стороны? пытался так, но так только...

Как сделать строку с несколькими одинаковыми по ширине Label, чтобы они масштабировались в зависимости от ширины экрана?
Я добавил несколько Label на View. У всех выставляю констрейны: левый 0, правый...

Как сделать, чтобы потоки выполнялись параллельно?
у меня есть 6 потоков, но как мне сделать чтобы они шли параллельно ? static...

Как сделать, чтобы 2 одинаковых перегруженных оператора выполнялись верно
Всем привет! Столкнулся с такой ситуацией, что мне понадобилось использовать 2...

9
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
09.10.2012, 13:30 2
Если у Вас загрузка данных с сервера идет синхронно - бейте себя по рукам и переделывайте.
Вызываете метод асинхронно в отдельном потоке, который подгружает что Вам нужно, а потом в главном потоке обрабатываете это.
А пока чтото грузится, в главном потоке будет отрабатывать изменение UI.
1
andrei0077
6 / 6 / 0
Регистрация: 23.06.2011
Сообщений: 92
09.10.2012, 15:14  [ТС] 3
Понятно. Тогда 2 вопроса
1) Как узнать, асинхронно идёт загрузка или синхронно?
2) Как вызвать метод асинхронно в отдельном потоке?
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
09.10.2012, 21:39 4
А вы как запрос формируете и вызываете?
inBackground
onThread
А GCD мне нравиться больше всего
1
andrei0077
6 / 6 / 0
Регистрация: 23.06.2011
Сообщений: 92
10.10.2012, 12:26  [ТС] 5
Я вызывал вот так
Objective-C
1
2
3
4
5
6
7
8
9
10
[self performSelector:@selector(addParser) withObject:nil];
 
- (void)addParser
{
    
    XMLParser* xmlParser =  [[XMLParser alloc] init];
    xmlParser.delegate = self;
    [xmlParser parce];
    
}
Теперь исправил на [self performSelectorInBackground:@selector(addParser) withObject:nil]; Проблема исчезла. А как это же сделать через GSD?
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
10.10.2012, 18:11 6
Цитата Сообщение от andrei0077 Посмотреть сообщение
[xmlParser parce];
Точно не будет работать
В данном случае GCD не стоит использовать, хватит и того, как Вы сделали, главное смотреть, чтобы
потоки правильно отрабатывали. И не было обращений из разных потоков с записью\чтением одновременно.
1
andrei0077
6 / 6 / 0
Регистрация: 23.06.2011
Сообщений: 92
10.10.2012, 19:57  [ТС] 7
Вы имеете ввиду, чтоб 2 потока одновременно не обращались к геттеру и сеттеру одного и того же свойства?
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
10.10.2012, 21:22 8
Ну это к примеру. Еще чтобы в базу не стучались с записью, чтобы только главный потом с GUI работал...
1
andrei0077
6 / 6 / 0
Регистрация: 23.06.2011
Сообщений: 92
15.10.2012, 14:06  [ТС] 9
Спасибо, понял. Последний момент хочу уточнить насчёт асинхронности/синхронности. Когда метод выполняется в отдельном потоке, это значит асинхронно? А когда методы выполняются последовательно в одном потоке, это значит синхронно? я правильно понял?
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
15.10.2012, 14:53 10
Это достаточно общие понятия, и да, Вы правильно поняли.
1
15.10.2012, 14:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 14:53

Стек cmd содержит комманды; как сделать так, чтобы эти команды выполнялись в отдельных потоках?
Стек cmd содержит комманды. Нужно сделать так, чтобы эти команды выполнялись в...

Как сделать чтобы при нажатии на кнопку выполнялись действия закрепленные за одним или сразу несколькими чекбоксами?
Есть форма с несколькими чекбоксами. Как сделать чтобы при нажатии на кнопку...

Сделать, чтобы по нажатию элемента из listBox выполнялись действия
например сумма. a=3; b=2; и нажимаем на сумму у нас выполняется сложение и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru