IOSDEV Telegram 617
UILabel стоит больше, чем вы думаете

Мы склонны считать лейблы легкими с точки зрения использования памяти. В конце концов, они просто отображают текст.

UILabels на самом деле хранятся в виде растровых изображений, которые легко могут потреблять мегабайты памяти.

К счастью, реализация UILabel умна и потребляет только то, что ей нужно:

🔘 Если ваш лейбл монохромен, UILabel выберет CALayerContentsFormat из kCAContentsFormatGray8Uint (1 байт на пиксель).
Но на немонохромные лейблы, например, для отображения «😰пожалуйста, попытайтесь сохранить душевное спокойствие, насколько можете» или многоцветные NSAttributedString, потребуется использовать kCAContentsFormatRGBA8Uint (4 байта на пиксель).

Монохромный лейбл потребляет не более width * height * contentsScale ^2 * (1 byte per pixel), а немонохромный — в 4 раза больше: width * height * contentsScale ^2 * (4 byte per pixel).

🔘 Например, на iPhone 11 Pro Max лейбл размером 414 * 100 точек может потреблять до: 414 * 100 * 3 ^ 2 * 1 = 372,6 КБ, а немонохромный 414 * 100 * 3 ^ 2 * 4 = ~ 1,49 МБ.

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

В распространенном анти-паттерне лейблы ячеек UITableView/UICollectionView остаются заполненными их текстовым содержимым, когда эти ячейки попадают в reuse queue.

Весьма вероятно, что после повторного использования ячеек текстовое значение меток будет другим, поэтому их хранение расточительно.

✅️ Несложные советы, которые помогут освободить потенциально мегабайты памяти:

1️⃣ Обнуляйте текст лейблов, если вы сделаете их скрытыми и будете отображать только изредка.

2️⃣ Обнуляйте текст лейблов, если они отображаются в ячейках UITableView/UICollectionView, в didEndDisplaying:forItemAt:

📖 В этом материале есть ещё несколько советов, которые помогут вам улучшить производительность.

📖 А вот тут можно прочесть про изображения и пути оптимизации.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36🔥6❤‍🔥4🕊4👏2🤩21



tgoop.com/iosdev/617
Create:
Last Update:

UILabel стоит больше, чем вы думаете

Мы склонны считать лейблы легкими с точки зрения использования памяти. В конце концов, они просто отображают текст.

UILabels на самом деле хранятся в виде растровых изображений, которые легко могут потреблять мегабайты памяти.

К счастью, реализация UILabel умна и потребляет только то, что ей нужно:

🔘 Если ваш лейбл монохромен, UILabel выберет CALayerContentsFormat из kCAContentsFormatGray8Uint (1 байт на пиксель).
Но на немонохромные лейблы, например, для отображения «😰пожалуйста, попытайтесь сохранить душевное спокойствие, насколько можете» или многоцветные NSAttributedString, потребуется использовать kCAContentsFormatRGBA8Uint (4 байта на пиксель).

Монохромный лейбл потребляет не более width * height * contentsScale ^2 * (1 byte per pixel), а немонохромный — в 4 раза больше: width * height * contentsScale ^2 * (4 byte per pixel).

🔘 Например, на iPhone 11 Pro Max лейбл размером 414 * 100 точек может потреблять до: 414 * 100 * 3 ^ 2 * 1 = 372,6 КБ, а немонохромный 414 * 100 * 3 ^ 2 * 4 = ~ 1,49 МБ.

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

В распространенном анти-паттерне лейблы ячеек UITableView/UICollectionView остаются заполненными их текстовым содержимым, когда эти ячейки попадают в reuse queue.

Весьма вероятно, что после повторного использования ячеек текстовое значение меток будет другим, поэтому их хранение расточительно.

✅️ Несложные советы, которые помогут освободить потенциально мегабайты памяти:

1️⃣ Обнуляйте текст лейблов, если вы сделаете их скрытыми и будете отображать только изредка.

2️⃣ Обнуляйте текст лейблов, если они отображаются в ячейках UITableView/UICollectionView, в didEndDisplaying:forItemAt:

📖 В этом материале есть ещё несколько советов, которые помогут вам улучшить производительность.

📖 А вот тут можно прочесть про изображения и пути оптимизации.

@iOS Dev

BY iOS Dev


Share with your friend now:
tgoop.com/iosdev/617

View MORE
Open in Telegram


Telegram News

Date: |

The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians. Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. How to create a business channel on Telegram? (Tutorial) “[The defendant] could not shift his criminal liability,” Hui said. On June 7, Perekopsky met with Brazilian President Jair Bolsonaro, an avid user of the platform. According to the firm's VP, the main subject of the meeting was "freedom of expression."
from us


Telegram iOS Dev
FROM American