2

我正在将我的一个项目转换为 ARC,但在以下行中出现错误:

_font = CTFontCreateWithName((CFStringRef)_fontName, fontSize, NULL);

其中 _fontName 是一个 NSString。错误是:

将 Objective-C 指针类型“NSString *”转换为 C 指针类型“CFStringRef”(又名“const struct __CFString *”)需要桥接转换

我有两个关于如何从 xCode 修复它的选项:

使用 __bridge 直接转换(所有权不变)

或者

使用 CFBridgingRetain 调用使 ARC 对象可用作 +1 'CFStringRef'(又名 'const struct __CFString *')

哪个是更好的选择?我正在考虑首选,因为我猜 CoreText 方法会保留它。但话又说回来,只是想确保我不会对 ARC 打折。

4

1 回答 1

3

您无需转让_fontName引用的所有权,因此您应该使用:

_font = CTFontCreateWithName((__bridge CFStringRef)_fontName, fontSize, NULL);
于 2013-08-26T22:34:50.860 回答