首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foundation是否使用Core Foundation?

Foundation是否使用Core Foundation?
EN

Stack Overflow用户
提问于 2017-09-10 18:31:47
回答 2查看 334关注 0票数 2

对我来说似乎不是这样的。当然,我没有基金会的源码,但如果是GNUStep,请看下面这个例子。

他们有一个像这样的https://github.com/gnustep/libs-base/blob/master/Source/NSArray.m的NSArray代码

在源代码中,他们没有提到CFArray。

https://github.com/gnustep/libs-corebase/blob/master/Source/CFArray.c

所有CF对应物也是如此。为什么?

EN

回答 2

Stack Overflow用户

发布于 2019-06-23 17:21:44

GNUstep的基础类不使用核心基础。GNUstep最初是OpenStep specificiation的一个免费、开源的实现。基础类和AppKit类都是从OpenStep规范派生的。虽然GNUstep的目标是赶上当前版本的Cocoa (根据GNUstep的Wiki,它保证了与macOS的兼容性,并且一些较新版本的macOS的类和方法已经添加到GNUstep中),但我的理解是GNUstep没有任何核心基础依赖项。我发现了一个有趣的2005 mailing list post,它讨论了为什么GNUstep不使用核心基础。

当苹果在1998年宣布其Mac战略时,它为开发人员提供了两个API: Cocoa和Carbon,Cocoa是基金会和AppKit库的更新版本,Carbon是从经典Macintosh工具箱派生的APIs,经过更新后适用于具有抢占式多任务和受保护内存的操作系统。Carbon和Cocoa都构建在Core Foundation之上,Core Foundation为这两个API提供了一个公共桥梁。Carbon和Cocoa在Mac中是对等的,两个API都不受欢迎。

因此,简而言之,Core Foundation被添加到Mac OS X中,作为Cocoa和Carbon之间的兼容性桥梁。但GNUstep本质上是现代的OpenStep,而OpenStep从来没有核心基础,因此GNUstep的基础不使用核心基础。

票数 2
EN

Stack Overflow用户

发布于 2017-09-11 00:01:51

GNUStep并不等同于苹果的基金会。我不太了解GNUStep是如何实现的,但在苹果的基金会中,NS和CF的对应物确实联系得非常紧密。正如您所说,我们没有Foundation的源代码,但仍有许多方法可以检测两者之间的集成。一个非常容易发现的方法就是检查许多Foundation对象的类:

代码语言:javascript
复制
NSMutableString *string = @"Foo".mutableCopy;
NSLog(@"%@", NSStringFromClass(string.class));

这个小程序输出__NSCFString,这表明CFString的实现确实在幕后使用。具体地说,NSStringCFString (以及NSArrayCFArrayNSDictionaryCFDictionary,以及许多其他基础和CF类型)是免费桥接的-这意味着它们的内部结构被设计为完全相同,因此您可以通过简单的类型转换将它们转换为另一个,而不需要昂贵的转换过程。因此,NSArray不仅仅使用<代码>D10,它实际上是一个<代码>D11。

当然,由于允许创建自己的NSStringNSArray等类的私有子类,这意味着要使桥接起作用,CF函数需要能够处理CF对象实际上是Objective-C子类的情况,如果是,则使用Objective-C实现。出于这个原因,我们有很多源的CoreFoundation对象实际上引用了许多NS等效项,例如下面链接的CFArray源,其中包含对NSArray的引用。

https://opensource.apple.com/source/CF/CF-1153.18/CFArray.c.auto.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46139713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档