2014-02-12 2 views
3

Я написал приложение iOS, в котором я успешно использую CGLayer. Изучая способы сжать немного больше производительности из этого приложения, я наткнулся на это сообщение в блоге: http://iosptl.com/posts/cglayer-no-longer-recommended/, в котором автор очень широко заявляет, что CGLayer никогда не будет использоваться. Отдельная почта сама по себе не вызывает беспокойства, но я также обнаружил, что люди ссылаются на этот пост как нечто, что нужно соблюдать.«CGLayer больше не рекомендуется»; Это общий консенсус?

Никаких реальных особенностей не предлагается. Например, автор утверждает, что «иногда это быстрее, иногда это медленнее». Это заставляет меня задаться вопросом, является ли проблема, что в целом программисты не будут использовать этот объект правильно.

Я полагаю, что этот вопрос предназначен для опытных разработчиков Cocoa/Cocoa Touch. Есть ли какая-то заслуга в этом? Является ли CGLayer действительно чем-то, чего следует избегать, и если да, то есть конкретные, измеримые причины, почему?

+0

Если вы уже написали приложение, у вас должно быть довольно хорошее представление о том, работает он так, как вы хотите. Это единственный тест, который имеет значение. –

+0

Тем не менее, если вы уже это сделали, и это работает для вас, я не вижу проблемы. –

+0

Стоит также прочитать комментарии в этом сообщении. Это не устарело, и оно не сломано, но стоит посмотреть последнюю обновленную дату в нижней части страницы: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGLayer/Reference/reference. html vs CALayer: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html. Возьмите его за то, что пожелаете, и по слухам (и неофициальный) одного парня в WWDC, и поиграйте с инструментами. –

ответ

1

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

Реальным является то, что если вы рисуете что-то на экране, оно, вероятно, ничего не купит на платформе iOS. На iOS основным блоком композиции экрана является CALayer. CALayer использует графический контекст кварца (CG), чтобы рисовать его на экране, и это может быть контекст, созданный самим CGLayer. Теперь CALayer будет аппаратно ускоренным сам по себе, попытается кэшировать любой графический контент на графическую карту и повторно использовать их. И такова цель, что мы использовали ранее CGLayer.

Кроме того, если речь идет о выключенной передаче, то CALayer может сделать это, когда shouldRasterize установлено на YES и при некоторых других обстоятельствах. Однако имейте в виду, что внеэкранная композиция - это еще одна задача, выполняемая процессором перед передачей отображаемого содержимого на GPU. Так что снова нет явного победителя.

CGLayer было бы особенно удобно при создании контекста CG, который не будет нарисован на экране, как в контексте PDF.

Я не уверен, почему команда разработчиков Apple попросила его полностью отказаться от CGLayer. Возможно, есть некоторые основные недостатки в архитектуре, но до этого они не документированы. Однако, пока мы не будем уверены в этом, и у нас есть существующие приложения, разработанные над архитектурой CGLayer, я не нахожу никакой конкретной причины, чтобы полностью отказаться от этого.

1

Номер Игнорируйте «Никогда», указанный в блоге, если вы никогда не профилируете воздействие, которое имеет CGLayer.

Рассмотрите CGLayer s как потенциал оптимизация для вашей программы. CGLayer s могут влиять на производительность вашей программы и потребление ресурсов положительными и отрицательными способами (во многих случаях это компромисс). В реферате это очень похоже на кеш (который имеет свои собственные затраты). Альтернативные механизмы кэширования имеют свои собственные связанные затраты, а CGLayer может быть или не быть лучшей реализацией кэширования для вашей программы.

1

Для меня наиболее значимым моментом является то, что автор написал в одном из своих последующих комментариях:

Как я понял из команды Core Graphics, они в основном не коснулись его [CGLayer], так как до выхода iPhone. Это была одна из тех вещей, которые звучали очень хорошо, но на практике это не сработало. Но на самом деле это не сломано, поэтому нет причин отрицать это. И, как я уже упоминал, если у вас есть потрясающий код CGLayer, я не вижу причин его замены. CGLayer не плохой. Это просто не поддерживается, как и другие части CG.

Было бы полезно, если бы Apple, Quartz 2D Programming Guide (обновлено 2014) не содержит следующий видное окно комментария:

Примечание: Растровые графические контексты иногда используется для рисования закадровых. Прежде чем вы решите использовать контекст графической графики для этой цели, см. Рисунок основного графического слоя. Объекты CGLayer (CGLayerRef) оптимизированы для внеэкранного рисования, потому что, когда это возможно, Quartz кэширует слои на видеокарте.

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

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