将Objective-C程序转换为Objective-C弧时,我得到了错误:

"cast of Objective-C pointer type 'NSString *' to C pointer type 'CFStringRef' (aka 'const struct __CFString *') requires a bridged cast "

代码如下:

- (NSString *)_encodeString:(NSString *)string
{
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, 
                                   (CFStringRef)string, // this is line in error
                                   NULL, 
                                   (CFStringRef)@";/?:@&=$+{}<>,",
                                   kCFStringEncodingUTF8);
    return [result autorelease];
}

什么是桥牌演员?

错误截图

推荐答案

看看LLVM网站上的ARC documentation.你必须使用__bridge或其他关键字之一.

这是因为核心基础对象(CF*REF)不受ARC控制,只有Obj-C对象才是.因此,当你在它们之间转换时,你必须告诉ARC对象的所有权,这样它才能正确地清理它们.最简单的情况是__bridge次投射,ARC不会做任何额外的工作(它假设您自己处理对象的内存).

Objective-c相关问答推荐

iOS9 - 这个应用程序正在从后台线程修改自动布局引擎 - 在哪里?

当我们只能使用 NSObject 时,为什么还要使用 id?

向 iOS 应用程序添加自定义字体以查找其真实姓名

如何在运行时向对象添加属性?

让 iPhone sleeping

在可可中的字符串上使用 MD5 哈希?

UISearchbar 键盘搜索按钮操作

在 viewDidAppear 之前无法正确设置框架

将子视图添加到 UIButton

如何切换回已经加载的 UIViewController?

OSStatus 错误代码 -34018

未找到 Apple Mach-O 链接器警告目录

WKWebView 判断 JavaScript 返回值

Objective C 中的调用方法或发送消息

在 DEBUG 模式下启用和禁用 NSLog

从带有参数的方法名称创建 Select 器

如何将 UITableView 滚动到特定位置

如何在没有死锁的情况下同步调度主队列?

如何根据按钮按下重新加载/刷新 UIPickerView(带有新数据数组)?

如何定义 UIColor 的常量值?