22

我已经在 Objective-C Cocoa 中使用 NSObjects 等进行了一段时间的编程。我看到还有另一个框架:CoreFoundation。当我仔细查看时,它似乎是一个 C 风格的框架。

所以我有一些好奇想澄清一下。我用谷歌搜索但没有找到直接的答案。

  1. CoreFoundation 框架的目的是什么?
  2. Cocoa 框架不是已经提供了所有需要的东西吗?
  3. CoreFoundation 框架是否提供了 CocoaFramework 没有提供的任何优势?

这些是我的一些问题。如果有人可以提供答案,或者为我提供阅读它的资源,那就太好了。我想知道它是否值得更多地了解该框架。

4

3 回答 3

20

CoreFoundation 不仅仅是 Foundation 的基于 C 的替代方案。用过于简单的术语来说,Foundation 本质上就是CoreFoundation,因为一个是建立在另一个之上的。Foundation 中的许多类只是围绕它们的 CoreFoundation 对应物的轻量级 Objective C 包装器,这就是免费桥接的工作原理(例如 CFString 和 NSString)。

有关更多历史和更技术性的解释,请参阅这篇文章

如果你真的想阅读 CoreFoundation 源代码,这里有几个版本的 Apple“CFLite”框架可供参考。

于 2012-07-11T16:09:51.003 回答
20

历史:基金会的历史可以追溯到 1993/1994 年,其中的 API 是 NeXT 发布的 OpenStep API 的一部分。

CoreFoundation 框架的目的是什么?

CF 是在 Mac OS 向 Mac OS X 过渡期间创建的,以帮助支持该过渡。最初,它是为了速度和允许编写纯粹的非 Objective-C 程序。随着时间的推移,这已被证明不是问题,并且 CF 有越来越多的位在 Objective-C 中实现(使用类似 otool 的工具查看 CoreFoundation 二进制文件)。

CFLite 是一种轻量级、便携的纯 C (IIRC) 变体。

Cocoa 框架不是已经提供了所有需要的东西吗?

或多或少。而且,当然更适用于在 iOS 或 OS X 上构建 GUI 应用程序。

CoreFoundation 框架是否提供了 CocoaFramework 没有提供的任何优势?

几个,但通常以降低简单性和增加脆弱性为代价。

例如,CF 集合允许您完全自定义管理内存和识别对象的方式;您可以提供自定义分配/免费/散列/比较挂钩。通过这个,您可以“轻松”地将非 Objective-C 类型封装在 CF 集合中。

于 2012-07-11T16:40:01.740 回答
3

Core Foundation 框架提供与 Foundation 框架相同的功能,但使用 C 而不是 Obj-C,因此它可以与 C 框架一起使用。

如果您环顾四周,您会发现 Apple 有一些 C 框架,例如 Core Graphics、Core Audio、Address book 等。

于 2012-07-11T15:56:08.837 回答