返回
ObjC 里的@objc, @objcMembers 与Swift中的Dynamic
IOS
2023-09-17 07:00:38
在 Objective-C 中,对象是基于运行时的,方法或属性使用动态派发,在运行调用时再决定实际调用的具体实现。而 Swift 为了追求性能,如果没有特殊需要的话,是不会在运行时再来决定这些的。也就是说,Swift 类型的成员或者方法在编译时就已经决定,而运行时便不再需要经过一次查找和判断。
共同点
@objc
、@objcMembers
和Dynamic
都是用来在 Swift 中使用 Objective-C 的特性,可以用来编写一个 Objective-C 框架,以供 Swift 使用。- Objective-C 对象是基于运行时的,方法或属性使用动态派发,在运行调用时再决定实际调用的具体实现。
- Swift 为了追求性能,如果没有特殊需要的话,是不会在运行时再来决定这些的。也就是说,Swift 类型的成员或者方法在编译时就已经决定,而运行时便不再需要经过一次查找和判断。
不同点
@objc
是用来将一个 Swift 类标记为 Objective-C 可见,这样就可以在 Objective-C 代码中使用它。@objcMembers
是用来将一个 Swift 类的所有成员标记为 Objective-C 可见。Dynamic
是用来将一个 Swift 类的某个成员标记为动态,这样就可以在 Objective-C 代码中使用它。
使用场景
- 当你想要在 Objective-C 代码中使用一个 Swift 类时,可以使用
@objc
和@objcMembers
。 - 当你想要在 Objective-C 代码中使用一个 Swift 类的某个成员时,可以使用
Dynamic
。
注意事项
@objc
、@objcMembers
和Dynamic
只能用于类和结构体,不能用于枚举和协议。- 当你使用
@objc
和@objcMembers
时,需要确保你的 Swift 代码与 Objective-C 代码兼容。 - 当你使用
Dynamic
时,需要确保你的 Swift 代码与 Objective-C 代码兼容。 - 对于无需调用 OC 的成员或者方法,不建议加 Dynamic,否则会降低 Swift 的性能。
总结
@objc
、@objcMembers
和 Dynamic
都是用来在 Swift 中使用 Objective-C 的特性,它们的区别在于:
@objc
是用来将一个 Swift 类标记为 Objective-C 可见,这样就可以在 Objective-C 代码中使用它。@objcMembers
是用来将一个 Swift 类的所有成员标记为 Objective-C 可见。Dynamic
是用来将一个 Swift 类的某个成员标记为动态,这样就可以在 Objective-C 代码中使用它。