Я пытаюсь улучшить производительность прокрутки в нашем приложении. Я следовал всем общепринятым советам (нарисуйте их самостоятельно с помощью CG, ячейка непрозрачна, нет подпредставлений и т. Д.), Но иногда он все еще заикается, когда у нас есть фоновый процессор и сетевая активность.
Здесь указано одно решение:
http://www.fieryrobot.com/blog/2008/10/08/more-glassy-scrolling-with-uitableview/
- для кэширования растровых снимков ячеек, которые мы пробовали. Но растровые изображения были нечеткими и занимали тонну памяти (~ несколько сотен килобайт каждый).
Одним из предложений в комментариях к этой ссылке является кэширование ячеек с использованием CGLayer или CALayer (?), Поскольку они попадают в память графической карты. Итак, несколько вопросов,
1) Кто-нибудь пробовал это? Пример кода?
2) Сколько памяти имеет графическая карта iphone / ipod touch? Имеет ли это какой-то смысл?
3) Есть ли другие предложения по ускорению?
Дополнительная информация
Я использовал сэмплер процессора (на телефоне) и систематически убирал вещи из клетки, чтобы выяснить проблему. Несколько вещей:
1) Это не настройка ячейки. Если я удаляю только вызовы рисования (drawinrect и т. Д.), Но оставляю настройку, она становится гладкой.
2) Это не рисунок самого маленького изображения (25x25 png), если я положу, что это хорошо.
3) Если я добавлю второе или третье изображение (первое - это большой фон 320x1004kB, другое - изображение кнопки 61x35 4kB), оно заикается. Я беру оба UIImages в методе класса, поэтому он кэшируется.
4) Текст тоже проблема. Похоже, что drawRect тратит 75% своего времени в трех методах NSString drawInRect, которые я использую. Как:
[mytext drawInRect: drawrect withFont: myFont lineBreakMode: UILineBreakModeTailTruncation];
Эти звонки, кажется, проходят через webcore, возможно, это вызывает некоторые заикания? Мне нужно уметь форматировать две строки текста и один маленький абзац текста. Мне нужна возможность обрезать текст с помощью эллипсов. Могу ли я выполнить это из критического пути и кэшировать их? Могу ли я сделать эту часть со слоем?