2013-10-05 245 views
3

我正在尝试新的iOS 7 API,并且下面的代码需要一分钟才能执行!NSAttributedString initWithData:options:documentAttributes:error:执行速度非常慢

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); 

这是怎么回事?

回答

6

经过一番调查后,我意识到我正在将此方法称为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();  
     }); 
    } 
}