什么是目标c运行时功能?

时间:2017-03-07 07:22:12

标签: objective-c swift runtime nsobject

在我刚刚阅读的博客文章中:

' Swift允许我们从NSObject扩展类以获得对象的Objective-C运行时特性。它还允许我们使用@objc注释Swift方法,以允许Objective-C运行时使用这些方法。'

我不理解术语Objective-C运行时功能。是否意味着代码也可以在Objective-C项目中使用?

2 个答案:

答案 0 :(得分:2)

引用apple docs

  

Objective-C运行时是一个运行时库,它提供对Objective-C语言的动态属性的支持,因此被所有Objective-C应用程序链接。 Objective-C运行时库支持函数在/usr/lib/libobjc.A.dylib中的共享库中实现。

该API主要用于开发Objective-C与其他语言之间的桥接层,或用于低级调试。你很可能不需要使用它。

即使在没有单行Objective-C代码的情况下编写,每个Swift应用程序都在Objective-C运行时内执行,这就是您可以访问它的原因。

您可以执行swizzling

之类的操作

答案 1 :(得分:0)

Objective-C 运行时

Swift 可以使用 Objective-C Runtime 库。

C + extra layer + Objective-C Runtime = Objective-C

它使用类似的 API,并针对 iOS 或 MacOS 等不同平台使用不同的实现。

它包含:

  • 类、对象、变量、属性、方法等基本结构
  • 处理这些结构的函数
    • 自省 - 在运行时获取/读取有关类/对象的信息。例如实例变量、方法名称、方法参数。 class_getName
    • 反射 - 修改自己的结构和行为。例如分配新类、添加变量、添加方法。 class_addMethod
    • objc_msgSend - 基于消息调度
    • Swizzling - 在运行时实现交换方法。 method_exchangeImplementations。 [Objective C], [Swift] 混合示例

使用 [@objc vs dynamic] 公开 Swift 的 Objective-C API 并为 Swift 代码添加动态行为。当您需要通常的快速方法无法做到的事情时,它很有用。很好的例子是 KVO、swizzling...