Unter iOS 8 (und 8.1 Beta) ist die Leistung der Erstellung eines NSAttributedString viel schlechter als 7 (2-3x). Dies ist besonders auffällig, wenn Sie mehrere Instanzen in derselben Ansicht verwenden. Das Laden von vier verschiedenen Labels führt zu einer Verzögerung von mehr als einer Sekunde, wenn der Benutzer auf die neue Ansicht klickt.NSAtributedString Leistung ist schlechter unter iOS 8
Leider kann man dies nicht einmal in einen anderen Thread werfen, da es hinter den Kulissen WebKit verwendet. Ich habe Apple einen Fehler gemeldet, brauche aber Ideen zu Workarounds oder einen besseren Implementierungsansatz.
In viewDidLoad:
self.labelOne.attributedText = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
documentAttributes:nil
error:&error];
Schnellbeispielprojekt: https://github.com/BenSS/AttributedStringTest
UPDATE:
iOS9 verbessert wieder Dinge, so ist die Geschwindigkeit nicht vollständig lähmende die UI-Interaktion. Leider ist es immer noch nicht so schnell wie unter iOS7. (Testen Sie es selbst mit der Demo!)
Es ist lächerlich, dass sie die schlechte Leistung dieser unter 8 verpasst haben, da es unter 7 gut war. Danke für den DTCoreText Vorschlag, da das eine gute Notlösung für unsere Bedürfnisse auch ist. – Ben
Ich weiß, ich denke, die Jungs von Apple wurden unglaublich hart für iOS 8 gedrängt und sie haben eine Menge toller APIs veröffentlicht, aber leider wurden einige Dinge vernachlässigt. Angesichts der Tatsache, wie viel Wert auf Text-Kit gelegt wurde, können wir nur hoffen, dass dies mit iOS 9 –
@DanielGalasko adressiert wird. Irgendeine Idee, wenn es war? –