3

我正在尝试新的 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);

到底是怎么回事?

4

1 回答 1

7

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

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    if (self.successBlock) {
        dispatch_async(dispatch_get_main_queue(), ^{
            //this success block eventually calls my NSAttributedString code above
             self.successBlock();     
        }); 
    }
}
于 2013-10-05T13:11:05.940 回答