2013-10-05 311 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();  
     }); 
    } 
}