• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 什么是 __NSCFData,它与 NSData 有什么关系?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:34:59 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在 iOS 中遇到以下错误,无法很好地了解 __NSCFData 是什么。我理解错误发生的原因并且我们已经解决了这个问题,但我对错误消息中出现的不熟悉的类感到好奇。

2017-08-07 21:41:37.458 [**App name redacted**][5316:2314238]
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[__NSCFData isEqualToString:]: unrecognized selector sent
to instance 0x6080000b97b0'

我阅读了 NSData 上的文档, CFData , 和 toll-free bridging

我还查看了 __NSCFData 的标题它是 NSImmutableData 的子类。还有一个NSCFData课也是,这让我很困惑。

我有以下问题:

  1. __NSCFData 中的双下划线是干什么用的?
  2. NSCFData 到底是什么?也许它是一种模棱两可的类型,可以引用 NSDataCFData 对象?



Best Answer-推荐答案


许多 Foundation 类型和对应的 CoreFoundation 类型是“免费桥接”的,这意味着 CoreFoundation 结构的内部布局与 Objective-C 对象的布局相同,结果是免费桥接NS 和 CF 类型可以简单地相互转换,而无需经过任何转换过程。 NSDataCFDataRef 就是以这种方式桥接的类型示例;您可以从纯 C 中获取 CFDataRef,将其转换为 NSData *,并将其用作 Objective-C 对象,这样就可以工作了。

当然,为了实现所有这些魔法,在幕后进行了大量的黑客攻击,包括许多私有(private)类型,例如 __NSCFData。这些通常是您无需担心的实现细节;相关的部分是您的对象属于 NSData 的子类,因此您可以在其上使用 NSData 的方法(而不是 NSString 的;您发布的错误消息表明您的代码中的某些内容正在尝试将 NSString-isEqualToString: 方法发送到 NSData 对象,这是无效的)。

无论如何,要弄清楚是什么代码试图将错误消息发送到 NSData 对象,请在调试器中设置一个异常断点,然后在程序运行时立即将其打开错误。

关于ios - 什么是 __NSCFData,它与 NSData 有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46125664/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap