基金会核心基金会,反之亦然

时间:2014-05-30 04:40:36

标签: core-foundation foundation bridge

我刚刚了解了今天的__bridge演员,我不理解其背后的含义:

为什么Apple会创建两个彼此非常接近的框架,以便它们可以免费互换。

使用一个框架而不是另一个框架可以获得什么好处?

是否有任何好的教程可以显示在两个框架之间进行桥接时使用的策略?

2 个答案:

答案 0 :(得分:1)

几年前,您可以选择在Apple环境中使用C语言或Objective-C编写代码。从Mac上的基本低级到图形应用程序,您可以访问这两种API。

两个API都需要相同的抽象和概念,以避免不会使用C或Objective-C的开发人员。由于Objective-C是C的超集,因此很容易在Objective-C类中嵌入一个C结构。这避免了重新创建不同的抽象并使两者之间的交互更容易。

C版本的好处在于,您在较低层工作,使您的代码在技术上更轻,更快,因为您不需要使用Objective-C运行时。 我在技术上说,因为它比Objective-C低,但我不确定你今天能否抓住当前应用中的差异。 Objective-C版本的好处是动态性和面向对象的代码。你可以用C版做OO,但它会更加冗长。

关于桥接的最佳文档是LLVM弧文档:http://clang.llvm.org/docs/AutomaticReferenceCounting.html

Mike Ash对免费桥接有一个非常好的解释:https://mikeash.com/pyblog/friday-qa-2010-01-22-toll-free-bridging-internals.html

答案 1 :(得分:0)

如果我没有弄错的话,Core Foundation使用面向对象(因此驻留在更高层次的抽象上),而Foundation则没有。在实践中,这意味着一个使用Objective C而另一个使用C.这是Apple系统软件中的重复模式。原则上你可以使用它们的两个框架:__bridge__通过允许使用外来实体来帮助你,就像它们是某个类的合法的Objective-C对象一样。