В iOS 8 (и бета-версии 8.1) производительность создания NSAttributedString намного хуже, чем 7 (2-3x). Это особенно заметно, если вы используете несколько экземпляров на одном и том же представлении, загрузка 4 разных меток приведет к задержке в течение секунды с момента нажатия пользователем и появления нового представления.Производительность NSAttributedString хуже в iOS 8
К сожалению, вы не можете даже выбросить это в другой поток, так как он использует WebKit за кулисами. Я представил ошибку Apple, но мне нужны идеи об обходных решениях или более эффективном подходе к внедрению.
В viewDidLoad:
self.labelOne.attributedText = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
documentAttributes:nil
error:&error];
Быстрый образец проекта: https://github.com/BenSS/AttributedStringTest
UPDATE:
iOS9 улучшает вещи снова, так что скорость не полностью парализует взаимодействие UI. К сожалению, все еще не так быстро, как это было в iOS7. (испытайте его сами с демо!)
Это нелепо, что они пропустили плохую работу от этого до 8 лет, так как это было нормально до 7 лет. Спасибо за предложение DTCoreText, так как это хорошая остановка для наших нужд. – Ben
Я знаю, я думаю, что ребята из Apple были невероятно трудными для iOS 8, и они выпустили тонну отличных API, но, к сожалению, некоторые вещи были пренебречь. Учитывая, сколько внимания было уделено текстовому набору, мы можем только надеяться, что это будет рассмотрено с помощью iOS 9 –
@ DanielGalasko Любая идея, если бы это было? –