2017-02-22 5 views
0

핵심 텍스트를 사용하여 NSAttributed 문자열 열을 현명하게 표시하고 있습니다. 잘 작동합니다. 시스템 글꼴을 사용하는 경우 시뮬레이터와 장치 모두에서 지연없이 표시됩니다. 그러나 사용자 정의 글꼴을 사용하면 장치에 내용을 표시하는 데 더 많은 시간이 소요됩니다. 그러나 시뮬레이터에서 결과는 빠릅니다. 특성 사용 문자열을 표시 사용자 글꼴로 NSAttributed 문자열을 표시하는 데 더 많은 시간이 걸립니다.

- (void)updateAttributedString 
{ 
     // Existing Code 
    if (self.text != nil) 
    { 

     self.attributedString = [[NSMutableAttributedString alloc] initWithString:self.text]; 
     NSRange range = NSMakeRange(0, [self.text length]); 
     // Regarding Fixed font 
//  [ self.attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"TAUN_Elango_Abirami" size:20] range:range];//This is my custom font 


      // Regarding custom Font using below code 
     if (self.font != nil) { 
      CTFontRef font = [self createCTFont]; 
      [self.attributedString addAttribute:(NSString *)kCTFontAttributeName 
              value:(__bridge id)font 
              range:range]; 
      CFRelease(font); 
     } 
     } 
} 



- (CTFontRef)createCTFont; 
{ 

    CTFontRef font = CTFontCreateWithName((CFStringRef)self.fontName, self.pointSize, NULL); 

    return font; 
} 

내가 다음 코드 줄을 추가하면

,

[self.attributedString addAttribute:(NSString *)kCTFontAttributeName 
               value:(__bridge id)font 
               range:range]; 

장치에서 느립니다. 그러나 시뮬레이터에서는 빠릅니다. 이 코드를 추가하지 않으면 텍스트가 시뮬레이터와 장치 모두에 빠르게 표시됩니다.

+0

무엇이 질문입니까? –

+0

@AlbertRenshaw 맞춤 글꼴을 사용해야하므로 기기에서 텍스트를 지체없이 표시하고 싶습니다. 천천히 문제가됩니다. – Sharon

+0

XCode Instruments의 시간 프로파일 링을 사용하는 경우 특정 라인을 지적합니까? 또한, CoreText, CFStuff 및 bridge를 사용해야합니까? – Larme

답변

0

글꼴 개체를 한 번 만들고 그 위에 놓습니다. 여러 개의 객체를 공유해야하는 경우 정적 사전에 캐시 할 수 있습니다. 문자열을 업데이트 할 때마다 새 문자열을 만들지 마십시오. 글꼴 개체는 처음에는 필요한 모든 복잡한 디코딩 작업을 거의 확실히 수행하고 있습니다 (사용자가 만드는 요점이 아닙니다). 시스템 글꼴은 항상로드 및 디코딩되지만 참조 글꼴이없는 경우 사용자 글꼴은 유지되지 않습니다.

CTFont 대신 여기 UIFont으로 실험하고 싶을 수도 있습니다. UIFont은 상위 수준의 개체이며 내 경험에 의하면 더 많이 캐시됩니다. 나는이 특별한 상황을 탐구하지 않았다. 일반적으로 핵심 텍스트가 필요하지 않으면 일반적으로 UIKit 유형을 사용해야합니다. 이것은 "더 낮은 레벨이 더 빠르지 않으므로 카운터 직관적 일 수 있습니다." 글쎄, 낮은 수준 수 있습니다 빨리, 만약 당신이 뭘하는지 정확히 알고. 그러나 정말로 낮은 수준은 "당신이 더 많은 것을 스스로 처리해야한다는 것을 의미합니다." 보다 세밀한 것을 필요로 할 때까지는 UIKit을 신뢰하는 것이 일반적으로 더 나은 1 차 솔루션입니다.

시뮬레이터가 더 빨라지는 것은 놀라운 일이 아닙니다. Mac보다 처리 능력이 훨씬 뛰어나고 디스크보다 훨씬 빠른 Mac에서 작동합니다. 시뮬레이터에서 물건을 움직이면 실제로는 특별한 UI로 실행되는 Mac 응용 프로그램입니다. 안드로이드 사용과 같은 완전한 에뮬레이터는 아닙니다.

관련 문제