2011-12-13 2 views
0

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

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

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

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

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

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

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

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

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

+1

Вы загружаете изображения в свой UITableViewCell асинхронно? –

+0

Да, я знаю. Это асинхронные вызовы на мой сервер. –

+0

Вы делаете какую-либо форму обработки фона? – Magnus

ответ

3

Мой ответ не будет рассматривать все ваши очки, но вот пара:

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

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

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

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

+0

Использование пользовательских шрифтов без предварительной загрузки также может быть дорогостоящим. Например, предварительная загрузка всех символов ascii из «Chalkduster» занимает около 10 секунд на моем iPod ... – debleek63

+0

@Wayne: Спасибо за совет. Я постараюсь начать там. Хорошая идея о кешировании высоты тоже. Это имеет большой смысл. –

+0

@debleek: Как кешировать шрифты? –

0

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

+0

Честно говоря, я пробовал работать с инструментами и не получал много от этого, хотя я должен быть лучше об этом и продолжать с ним. Я проверю это снова. –

Смежные вопросы