Objective-C NSCache.m
和基础NSCache
有什么区别?当我在Swift中使用NSCache
时,它使用的是基础的NSCache
还是Objective-C的NSCache
?
如果你在Swift中“跳到定义”NSCache
,那么Xcode会显示以下文件,它导入<Foundation/NSObject.h>
,所以我认为它使用的是Foundation的NSCache
,但代码也是ObjC,所以我很困惑。
Objective-C NSCache.m
和基础NSCache
有什么区别?当我在Swift中使用NSCache
时,它使用的是基础的NSCache
还是Objective-C的NSCache
?
如果你在Swift中“跳到定义”NSCache
,那么Xcode会显示以下文件,它导入<Foundation/NSObject.h>
,所以我认为它使用的是Foundation的NSCache
,但代码也是ObjC,所以我很困惑。
1条答案
按热度按时间k97glaaz1#
iOS和其他苹果平台使用封闭源代码的苹果版基金会,这不是你提供的两个链接。
第一个链接是swift-corelibs-foundation,它是在Swift中为非苹果平台(特别是Linux)重新实现的Foundation的大部分内容,目前还没有在任何苹果平台上使用,但主要由苹果沿着社区贡献者管理。
你的第二个链接来自GNUStep,它是可可的一个开源重新实现,苹果没有参与其中。完整的项目是OpenStep API的一个实现,由NeXT开发。这是一个有趣的项目,但与苹果生态系统没有真实的的交叉。它的日期早于苹果收购,更接近NeXTSTEP而不是iOS。
您的屏幕截图是正确的版本:Foundation的Objective-C专有版本。该版本的源代码不可用,只有头文件。如果你的目标是看到NSCache在iOS上的实际实现,那么它是不可用的。你能做的最好的事情是用Hopper之类的东西对其进行反向工程。(即使这样,通常最容易的方法是对macOS版本进行反向工程,并假设iOS版本是相同的。)
swift-corelibs-foundation中的版本旨在具有与Apple版本非常相似的行为,因此这是确定行为应该是什么的一个相当好的方法,但实现通常完全不同,并且可能在所有极端情况下的行为都不相同。