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

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

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

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

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

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

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

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

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

9
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
09.10.2012, 13:30 #2
Если у Вас загрузка данных с сервера идет синхронно - бейте себя по рукам и переделывайте.
Вызываете метод асинхронно в отдельном потоке, который подгружает что Вам нужно, а потом в главном потоке обрабатываете это.
А пока чтото грузится, в главном потоке будет отрабатывать изменение UI.
1
andrei0077
6 / 6 / 1
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

Как сделать чтобы в денвере идентификаторы id отображались последовательно
как сделать чтобы в денвере идентификаторы id отображались последовательно...

Как сделать чтобы поля со списком включались последовательно?
Всем здрасте! Прошу прощения, если есть уже подобное где то, то дать ссылочку....


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

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

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