Форум программистов, компьютерный форум, киберфорум
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225

Торможение UI при хитрой иерархии классов

27.03.2014, 22:40. Показов 1079. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Извините за много букв, заранее спасибо всем, кто прочитал!

Подскажите, пожалуйста, что может быть причиной такого поведения.
Есть контроллер, на нем, в частности, 20 кнопок:
Первые 10 кнопок: background - изображение, title - буква (вроде маленького алфавита)
Вторые 10 кнопок: background - изображение, title - пустой (ячейки, куда будут выводиться буквы)

Чтобы не мешать все в кучу в одном контроллере, я решил сделать так:
1. Создал класс "CharsManager", который полностью отвечает за работу с "алфавитом". При создании объекта этого класса я инициализирую его массивом кнопок с буквами:

Objective-C
1
2
NSArray *baseCharsButtons = @[self.char_1, self.char_2, self.char_3, self.char_4, self.char_5, self.char_6, self.char_7, self.char_8, self.char_9, self.char_10];
charsManager = [[BaseCharsManager alloc] initWithCharsButtons:baseCharsButtons andDelegate:wordManager];
И каждой кнопке присваиваю внутри класса CharsManager обработчик нажатия.

2. Создал класс "WordManager", который полностью отвечает за отображение вводимого слова. Его при создании аналогично проинициализировал массивом кнопок-ячеек, куда выводятся вводимые буквы. И, как можно увидеть, сделал его делегатом своего "класса клавиатуры".

То есть, получается, мой главный контроллер не вмешивается во взаимодействие этих двух сущностей - они сами разбираются, когда там что надо вывести.

3. Создал кнопку "Очистить все", где выполняю следующие действия:
Objective-C
1
[wordManager clearAll];
Где метод <clearAll> являет собой следующее:
Objective-C
1
2
3
4
5
6
7
8
9
10
- (void)clearAll
{
    for (int i = 0; i < [self.charsBut count]; i++) {
        UIButton *but = [self.charsBut objectAtIndex:i];
        [but setTitle:@"" forState:UIControlStateNormal];
    }
    
    [word setString:@""];    // в word хранится текущее введенное слово
    currentIndex = 0;         // индекс текущей введенной буквы
}
//--------------------------------------------------
Для чего я собственно, это все пишу.
После первого же нажатия "Очистить все" начинаются тормоза UI: девайс (iPad 4) с задержкой реагирует на нажатия кнопок алфавита, и выводит буквы в свои ячейки с видимой паузой.
И такое начинает происходить после первого "Очистить все".

Я пересмотрел работу всеми профайлерами - все ОК, память бесконтрольно не растет, утечек нет, ничего на графиках профайлера не меняется после нажатия "Очистить все", но факт остается фактом.

Может быть мой подход в корне неправильный? И та структура, которую я соорудил, является чем-то ужасным, что может негативно влиять на работу?

Буду очень рад каким-то комментариям!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2014, 22:40
Ответы с готовыми решениями:

Виртуальные функции при создании иерархии классов
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class var{ int temperatura; float shirina; public: virtual...

Почему при создании класса у абстракных классов по иерархии пусто в _vptr ?
Вот что я имею ввиду:

Разработать архитектуру классов иерархии товаров при разработки системы управления потоков товаров
Уважаемое IT сообщество подскажите пожалуйста в каком направлении лучше двигаться в решении следующей задачи. Задача. Разработать...

5
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
28.03.2014, 02:34
ну из того, что я понял, ничего хитрого тут нету и, судя по коду, ничего сказать нельзя, т.к. вроде все нормально
возможно нужно увидеть больше деталей

единственное - это пару советов по архитектуре и конвенциям наименования (но они темы особо не касаются):
Цитата Сообщение от kievkao Посмотреть сообщение
initWithCharsButtons:baseCharsButtons andDelegate:wordManager
в названии метода редко используют 'and', только тогда, когда то, что последует за ним будет отличаться от других параметров по семантике действия или назначения
т.е ваш метод должен выглядеть так
Objective-C
1
initWithCharsButtons:baseCharsButtons delegate:wordManager
а 'and' можно было бы встретить например тут
Objective-C
1
initWithCharsButtons:baseCharsButtons delegate:wordManager andPerfomSomething:YES
Дальше менеджер, который работает напрямую с кнопками. Я считаю, что менеджер должен работать с данными, а не графическими элементами, а вот контролер - наоборот. Т.е было бы лучше передавать менеджеру не кнопки, а датасорсы этих кнопок, и его можно было бы применить к примеру на другой платформе (Mac OS) или для работы с кастомными кнопками, которые наследуются от UIView к примеру, вобщем суть в том, чтобы сделать код reusable, а вот контроллер пусть уже набивает кнопки этими датасорсами (не обязательно вьюконтроллер в котором все происходит, можно для этого создать отдельный)
многие могут не согласиться насчет этих замечаний, и, возможно, такая гибкость тут ни к чему, но если вы разрабатываете какой-то более-менее адекватный проект, то это лучше учитывать
1
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
28.03.2014, 07:40
Цитата Сообщение от kievkao Посмотреть сообщение
Я пересмотрел работу всеми профайлерами - все ОК, память бесконтрольно не растет, утечек нет, ничего на графиках профайлера не меняется после нажатия "Очистить все", но факт остается фактом.
Что ОК то? При чем тут утечки памяти вообще? Тайм профайлером смотрели? На что время тратиться при тормозах?
1
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
28.03.2014, 11:32
kievkao, начните с того, где у вас происходит обработка нажатия на "букву", затем по стеку вверх идите инструментами "step over/into" и смотрите вызовы.
Где-то много лишних вызовов. И все в главном потоке. Возможно создание объектов/итерирования для поиска/сортировки...
1
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
28.03.2014, 12:18
+1 за Time Profiler - все покажет и расскажет, и не надо гадать )
1
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
28.03.2014, 15:46  [ТС]
Спасибо всем за ответы!

Начал ковырять глубже Time Profiler'ом, увидел, что относительно много времени тратится на отрисовку фона ячейки, куда выводится буква.
Поигрался с кнопкой, которая представляет собой ячейку, изменил тип кнопки с "System" на "Custom" и все стало хорошо))

Сейчас буду читать, почему этот параметр сыграл настолько большую роль..

Добавлено через 1 минуту
Цитата Сообщение от Vorona Посмотреть сообщение
Дальше менеджер, который работает напрямую с кнопками. Я считаю, что менеджер должен работать с данными, а не графическими элементами, а вот контролер - наоборот. Т.е было бы лучше передавать менеджеру не кнопки, а датасорсы этих кнопок

Что вы имеете в виду под датасорсами кнопок?
Я решил передавать своему менеджеру именно экземпляры UIButton, так как установка title для кнопки производится путем [button setTitle:forState:], где необходим доступ к самому объекту.

Если есть другой метод, то расскажите вкратце, пожалуйста, буду вам благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2014, 15:46
Помогаю со студенческими работами здесь

Разработать архитектуру классов иерархии товаров при разработке системы управления потоками товаров
Разработать архитектуру классов иерархии товаров при разработке системы управления потоками товаров для дистрибьюторской компании. ...

Вверх по иерархии классов
Доброго вечера, уважаемые. Помогите советом, или матюком, кто как может, все одно буду благодарен) Да, и не пинайте сильно за код -...

Реляционная БД и иерархии классов
Приветствую, форумчане! Появилась такая задача - есть базовый класс и несколько его наследников. И в базовом, и в производных классах...

Параллельные иерархии классов
Здравствуйте, уважаемые форумчане! Столкнулся с проблемой параллельных иерархий классов. Пусть есть три класса: class One { ...

Цепочка иерархии классов
Какой доступ будет в цепочке protected - public - protected? ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника 1С по перечислениям
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru