2016-03-02 1 views
0

Я использую пользовательский CALayer сделать некоторый интерфейс для расширения клавиатуры и я заметил огромное количество используемой памяти из CoreAnimation после добавляю линиюCore Animation использует слишком много памяти после того, как я поставил contentsScale на обычай CALayer

self.contentsScale = UIScreen.mainScreen().scale 

Общее использование памяти из основных объектов анимации перескакивает с 4 МБ на все мое приложение до 15 МБ. Я видел это путем профилирования на моем устройстве и просмотра использования памяти.

Это вызывает мое расширение аварии на 6+

Это справедливо, даже если я на самом деле не рисовать ничего. Я все вытащил из drawInContext, который все еще воспроизводится.

override func drawInContext(context: CGContext) 
{    
} 

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

Кто-нибудь знает, как уменьшить объем памяти для этого?

Это только проблема на Iphone 6 плюс

ответ

0

Пустой drawInContext: реализации до сих пор вызывает распределения, потому что, как -[UIView drawRect:] метода, отменяя этот метод говорит IOS, что вы хотите сделать заказ чертежа, который требует, чтобы резервное хранилище будет выделено для хранения результатов рисования слоя.

Размер этих данных в памяти, при условии, что нет умных оптимизаций, будет составлять как минимум width of the keyboard * height of the keyboard * screen scale * color components per pixel * sizeof(CGFloat), или 375 * 216 * 3 * 4 * 8 = ~7mb для клавиатуры того же размера, что и клавиатура на 64-битном iPhone 6+.

Следует отметить, что следует избегать переопределения drawInContext: или drawRect:, если нет другого варианта. Если у вас нет специального текстового эффекта, который, как вы знаете, не может быть достигнут без индивидуального кода чертежа, iOS предлагает множество опций, которые проще использовать и более высокие характеристики, такие как UILabel, CATextLayer или даже правильно подготовленные CAShapeLayer s ,

+0

Спасибо! Я подумал, что это будет так. Я унаследовал этот код от кого-то другого и просто пытался заставить его работать с наименьшим количеством работы, но мне кажется, что я должен его перепроектировать. – schlaegerz

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

  • Нет связанных вопросов^_^