Оптимизация производительности на iPhone - PullRequest
0 голосов
/ 14 декабря 2011

Сегодня я выпустил первую бета-версию своего приложения для iPhone на TestFlightApp. Все идет хорошо, пока я не замечу, что отзывчивость приложения довольно грубая. Конечно, у меня нет «хорошего» нативного ощущения, к которому я стремлюсь.

Я был особенно разборчив в отношении своего распределения / освобождения памяти, поэтому я не думаю, что это проблема. По сути, я не знаю, куда обратиться, чтобы повысить производительность своего приложения.

Вот где я думаю, что некоторые из моих замедлений можно отнести к:

  1. Использование UIAppearance для настройки внешнего вида большинства (если не всех) элементов пользовательского интерфейса. Я использую совершенно новый шрифт, много CAGradientLayers и много правок в CALayer, чтобы рисовать красивые тени.

  2. Сгруппированные ячейки UITableView, которые отображают изображения карты и детализированные списки.

  3. UITableViewCells, макеты которых обновляются каждый раз, когда я вызываю layoutSubviews.

  4. UITableViewCells с настроенными высотами. Для каждого вызова heightForRowAtIndexPath мне нужно реконструировать и изменить расположение представления, каждый раз возвращая точную высоту.

  5. Поскольку я программно создавал представления, контроллеры с более длинными вызовами viewDidLoad обычно загружаются медленнее. Какой код можно сместить в вызове init?

Есть ли у кого-нибудь советы или подсказки по решению этих проблем? Или, может быть, у людей есть истории о том, как они справились с замедлением производительности, когда выпустили свое первое приложение?

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

В моем ответе не будут учтены все ваши баллы, но вот пара:

1) Убедитесь, что вы используете Shadow Paths .Пути намного, намного более производительны.

2) Используете ли вы прозрачность или скругление углов?Если это так, попробуйте уменьшить прозрачность, насколько это возможно, и не закругляйте углы, используя CALayer cornerRadius.Вместо этого используйте обтравочную маску в drawRect представления, которое необходимо округлить.

4) Возможно, вы можете кэшировать высоту в массиве и не нужно повторять вычисления каждый раз.Это может / не может хорошо масштабироваться в зависимости от потенциального количества элементов, но может быть приемлемым в зависимости от варианта использования.

5) Есть ли виды, которые вы можете использовать повторно?Например, когда у меня есть пользовательский вид выбора на UITableViewCell, я создаю только один экземпляр, удерживаемый контроллером, и ссылаюсь на него во всех ячейках.

0 голосов
/ 14 декабря 2011

Запускали ли вы инструменты (или другую методологию профилирования), чтобы определить, где ваше приложение тратит большую часть своего времени.Было бы неплохо сделать это, прежде чем оптимизировать неправильную вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...