【问题标题】:What is the purpose of the CoreFoundation framework? [closed]CoreFoundation 框架的目的是什么? [关闭]
【发布时间】:2012-07-11 15:49:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我认为,例如,当您只是尝试从 c 或汇编语言中测试基本提示“hello world”时,不必处理 50 多个 obj-c/swift 类是非常棒的。 .. 或任何一天,真的。

标签: objective-c cocoa core-foundation


【解决方案1】:

历史:基金会成立于 ~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 集合中。

【讨论】:

  • 所以,听起来虽然 Core Foundation 提供了一个可以由纯 C 代码调用的 API,但您使用 Core Foundation 生成的任何可执行文件都包括您的 C 代码以及 Objective-C 运行时库(libobjc.dylib ),并作为具有动态链接引用的 Objective-C 样式的可执行文件运行(启动等)。
  • Core Foundation 有两个优点。方法查找不需要调用 objc_msgSend。因此,不需要花费时间查找要执行的方法。另一个与此相关,其中不传递函数的名称。因此,黑客很难探测您正在运行的应用程序以了解其中发生的情况。
  • @Imakemymark CoreFoundation 的大部分是通过使用 Objective-C 调用 Foundation 来实现的,所以,不,你并没有避免 objc_msgSend()。至于黑客攻击,使用 CoreFoundation 根本不是障碍。符号都在那里,很容易阅读程序集以查看正在使用的 CF 位。见stool -TtVv
  • 应该是otool,而不是stool。该死的自动更正再次获胜。
【解决方案2】:

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

如需更多历史信息和更多技术性解释,请参阅this article

如果您真的想阅读 CoreFoundation 源代码,可以参考 Apple 的“CFLite”框架的多个版本here

【讨论】:

  • +1 以获得出色的链接。但是,我不能选择两个答案。 BBum 回答了三个问题。
  • @user76859403 没问题,去找 bbum 的答案。这是最好的。
【解决方案3】:

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

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

【讨论】:

  • 实际上,CF 在 Objective-C 中实现了大块,并且一些 API 是其 Objective-C 对应物的包装器,而不是相反......
猜你喜欢
  • 1970-01-01
  • 2012-03-16
  • 2017-01-04
  • 2013-04-20
  • 2016-03-22
  • 2011-02-27
  • 2016-10-31
  • 1970-01-01
相关资源
最近更新 更多