Nsattributedstring заморозить UITableView


Приложение действительно замерзает при прокрутке с помощью NSAttributedString (когда я использую NSString, это работает нормально), поэтому там мой метод:

- (void)setSubtitleForCell:(TTTableViewCell *)cell item:(TTPhotoPost *)item
{
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:
                                            [item.caption dataUsingEncoding:NSUnicodeStringEncoding]
                                                                            options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
                                                                 documentAttributes:nil
                                                                              error:nil];

    [cell.descriptionLabel setAttributedText:attributedString];
}

Какие-нибудь ошибки есть? или каким-то образом сделать АТТ.струна быстрее?

2 4

2 ответа:

Я бы предложил создать NSAttributedString из HTML один раз асинхронно и сохранить приписываемую строку в вашей модели. Таким образом, вам не придется выполнять преобразование HTML -> attributed string при повторном использовании каждой ячейки, что часто происходит при прокрутке.

Сделайте это асинхронно (я думаю, что проблема связана с тем, что scroll view также использует основной поток):

- (void)setSubtitleForCell:(TTTableViewCell *)cell item:(TTPhotoPost *)item
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:
                                                [item.caption dataUsingEncoding:NSUnicodeStringEncoding]
                                                                                options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
                                                                     documentAttributes:nil
                                                                                  error:nil];
        dispatch_on_main_queue(^{
            [cell.descriptionLabel setAttributedText:attributedString];
        });
    });
}