2013-10-05 2 views
3

새 iOS 7 API를 시험해 보았고 다음 코드가 실행되는 데 1 분 이상 걸릴 것입니다!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();  
     }); 
    } 
} 
관련 문제