iOS UIFont кеширует? - PullRequest
       63

iOS UIFont кеширует?

14 голосов
/ 04 октября 2011

Я пытаюсь выяснить, следует ли мне кэшировать [UIFont fontWithName: @ "myfont" size: 24].Я повторно использую этот шрифт во многих местах.Мне интересно, если iOS уже кеширует это для меня, потому что кеширование шрифтов очень распространено на уровне ОС.

Спасибо.

Ответы [ 2 ]

20 голосов
/ 17 февраля 2013

Интересно, iOS уже кеширует это для меня, потому что кэширование шрифтов очень распространено на уровне ОС.

это то, что делает iOS (я тестировал только на iOS 6.1).

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

Оказывается, люди в Apple тоже умны.Объекты, возвращаемые fontWithName:size:, одинаковы для одинаковых fontNames и одинаковых размеров.Существует механизм кэширования.

Чтобы подтвердить это, я включил в приложение пару NSLogs.

NSLog(@"GillSans 12 %p", [UIFont fontWithName:@"GillSans" size:12.0f]);

Все они показывают один и тот же адрес памяти.

Работает также с вашими пользовательскими шрифтами.

20 голосов
/ 04 октября 2011

В последний раз, когда я проверял, системные шрифты кэшировались (то есть, вызов [UIFont systemFontOfSize:foo] дважды возвращал вам один и тот же объект). Я не уверен, как часто кэш сбрасывается, но было бы очень глупо не кэшировать шрифты, так как они создаются все время во время загрузки пера.

Конечно, если вы делаете это дважды в одной и той же функции, то кешировать ее в локальной переменной немного быстрее (и это уменьшает размер кода, поскольку вызовы метода Obj-C огромны!). Если вы делаете это время от времени в разных местах, это может не стоить усилий.

Тем не менее, вы можете захотеть получить доступ к шрифту через метод класса или метод "singleton" (например, [MyAppBranding titleFont] или [[MyAppBranding currentBranding] titleFont]). Это означает, что вы можете гораздо проще изменить используемый шрифт, добавить дополнительный уровень кэширования, если заметите, что это узкое место в производительности, и упростить * поддержку нескольких брендов.

...