2
    CTFontRef font = CTFontCreateWithName((__bridge  CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
    NSRange  rangeHighlight = NSMakeRange(range.location, substringToHighlight.length);
    if (font) {
        [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge  id)font range:rangeHighlight];
        CFRelease(font); //Is this still necessary?
    }

このコードをhttps://github.com/mattt/TTTAttributedLabelからコピーして貼り付けます

  CTFontRef font = CTFontCreateWithName((CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
  if (font) {
    [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(id)font range:boldRange];
    [mutableAttributedString addAttribute:@"TTTStrikeOutAttribute" value:[NSNumber numberWithBool:YES] range:strikeRange];
    CFRelease(font);
  }

そうすると、キーワード__bridgeを使用する必要があるというエラーが発生しました。それは何ですか?入れてコンパイルエラーストップ。しかし、それでもCFRelease(font)を使用する必要があるのだろうか

加えて

  1. CFReleaseのCFとは何ですか?
  2. __bridgeとは何ですか?
  3. __bridgeを使用した後にCFRelease(font)を実行する必要がありますか?
  4. これについてどこでもっと知ることができますか?
4

2 に答える 2

2
  1. CFは「CoreFoundation」の略です。CTFontRefはCoreFoundationタイプであるため、CFRelease()を使用してリリースできます。

  2. __bridgeは、保持可能なタイプから保持不可能なタイプに(またはその逆に)キャストするときに使用されるキーワードであり、所有権の変更が発生しないようにコンパイラーに通知します。

  3. はい、__bridge所有者が誰であるかは変更されないためです。

  4. このドキュメントはかなり包括的です。

于 2013-01-31T09:53:56.067 に答える
2

はい、まだCFRelease(font)を使用する必要があります。

あなたはまだフォントを作成しているので、それもリリースする必要があります。__bridgeの部分は、フォントが保持されるかどうかに関連しています。

  1. CFは、Foundationが構築されているCレベルのAPIであるCoreFoundationの略です。CFReleaseは、CoreFoundationオブジェクトをリリースする方法です。

  2. __bridgeは、オブジェクトをCore Foundationオブジェクトに変換するときに、オブジェクトを保持する方法と保持しない方法をARCに指示します。この質問では、さまざまな__bridgeタイプについて説明します。

  3. それでも解放する必要があります(上記で説明)。

  4. 「CoreFoundation」を検索します。デザインコンセプトは、一般的なデザインを説明しています。

于 2013-01-31T09:53:01.547 に答える