我在 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
课也是,这让我很困惑。
我有以下问题:
__NSCFData
中的双下划线是干什么用的?NSCFData
到底是什么?也许它是一种模棱两可的类型,可以引用 NSData
或 CFData
对象?许多 Foundation 类型和对应的 CoreFoundation 类型是“免费桥接”的,这意味着 CoreFoundation 结构的内部布局与 Objective-C 对象的布局相同,结果是免费桥接NS 和 CF 类型可以简单地相互转换,而无需经过任何转换过程。 NSData
和 CFDataRef
就是以这种方式桥接的类型示例;您可以从纯 C 中获取 CFDataRef
,将其转换为 NSData *
,并将其用作 Objective-C 对象,这样就可以工作了。
当然,为了实现所有这些魔法,在幕后进行了大量的黑客攻击,包括许多私有(private)类型,例如 __NSCFData
。这些通常是您无需担心的实现细节;相关的部分是您的对象属于 NSData
的子类,因此您可以在其上使用 NSData
的方法(而不是 NSString
的;您发布的错误消息表明您的代码中的某些内容正在尝试将 NSString
的 -isEqualToString:
方法发送到 NSData
对象,这是无效的)。
无论如何,要弄清楚是什么代码试图将错误消息发送到 NSData
对象,请在调试器中设置一个异常断点,然后在程序运行时立即将其打开错误。
关于ios - 什么是 __NSCFData,它与 NSData 有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46125664/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |