ios - NSAttributedString 初始化数据 :options:documentAttributes:error: is executing very slowly

标签 ios webkit nsattributedstring

我正在试用新的 iOS 7 API,执行以下代码需要一分钟多的时间!

NSLog(@"start encoding");
NSString *htmlBody = @"<html><body>I am <b>bold</b> and <i>italic</i>";
NSStringEncoding encoding = NSUnicodeStringEncoding;
NSData *data = [htmlBody dataUsingEncoding:encoding];
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                          NSCharacterEncodingDocumentAttribute: @(encoding)};

NSAttributedString *body = [[NSAttributedString alloc] initWithData:data
                          options:options
                          documentAttributes:nil
                          error:nil];

NSLog(@"end encoding%@", body);

这是怎么回事?

最佳答案

在做了一些调查之后,我意识到我正在调用这个方法作为 webview didFinishLoading 回调的一部分。我相信这会导致某种形式的实时锁定或等待 WebKit 的线程。解决方案是让该 webview 方法从 dispatch_aync block 内部调用其委托(delegate)(或其他代码):

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    if (self.successBlock) {
        dispatch_async(dispatch_get_main_queue(), ^{
            //this success block eventually calls my NSAttributedString code above
             self.successBlock();     
        }); 
    }
}

关于ios - NSAttributedString 初始化数据 :options:documentAttributes:error: is executing very slowly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198197/

相关文章:

javascript - WebKit 和 Gecko 之间的样式行为差异

javascript - 从 JavaScript 传递给 Qt/C++ 对象的字符串

html - WebKit:没有 <DOCTYPE> 的 flexbox?

ios - 如何为 NSAttributedString 设置默认字体

ios 10 Swift 电话未在某些号码上发起

ios - 在 UILabel 背景中添加了图标,接下来要更改图标色调颜色

ios - testflight 上的应用程序名称与 iTunesConnect 不同

ios - 如何连接 NSAttributedString?

ios - 检查 NSUnderlineStyle BitMask 的值

ios - 导航 Controller 为空