我今天刚刚了解了 __bridge 演员表,但我不了解其背后的含义:
苹果为什么要创建两个框架,它们彼此如此接近,以至于它们可以免费互换。
通过使用一个框架而不是另一个获得什么好处?
有没有什么好的教程可以展示在两个框架之间桥接时使用的策略?
我今天刚刚了解了 __bridge 演员表,但我不了解其背后的含义:
苹果为什么要创建两个框架,它们彼此如此接近,以至于它们可以免费互换。
通过使用一个框架而不是另一个获得什么好处?
有没有什么好的教程可以展示在两个框架之间桥接时使用的策略?
几年前,您可以选择在 Apple 环境中使用 C 或 Objective-C 编写代码。从 Mac 上的基本低级应用程序到图形应用程序,您都可以访问这两个 API。
两种 API 都需要相同的抽象和概念,以不拒绝使用 C 或 Objective-C 的开发人员。由于 Objective-C 是 C 的超集,因此很容易将一个 C 结构嵌入到 Objective-C 类中。这避免了重新创建不同的抽象并使两者之间的交互更容易。
C 版本的好处是您在较低层工作,这使您的代码在技术上更轻、更快,因为您不需要使用 Objective-C 运行时。我说技术上是因为它比 Objective-C 级别低,但我不确定你今天能否在当前应用程序中抓住差异。Objective-C 版本的好处是动态性和面向对象的代码。你可以用 C 版本做 OO,但它会更冗长。
最好的桥接文档是 LLVM arc 文档:http ://clang.llvm.org/docs/AutomaticReferenceCounting.html
Mike ash 对免费桥接有很好的解释:https ://mikeash.com/pyblog/friday-qa-2010-01-22-toll-free-bridging-internals.html
如果我没记错的话,Core Foundation 使用面向对象(因此位于更高的抽象级别上),而 Foundation 没有。实际上,这意味着一个使用 Objective C 而另一个使用 C。这是 Apple 系统软件中反复出现的模式。原则上,您可以使用任何一种框架来混合它们:__bridge__
通过允许使用外部实体来帮助您,就好像它们是某个类的合法 Objective-C 对象一样。