gpt4 book ai didi

objective-c - 防止在 Swift 中子类化 Objective-C 类

转载 作者:搜寻专家 更新时间:2023-11-01 06:57:20 24 4
gpt4 key购买 nike

我正在为我的 Objective-C 类添加 Swift 内部注释。我试图阻止我的类被子类化:

__attribute__((objc_subclassing_restricted))
@interface CWTestFinalClass : NSObject
@end

这在 Objective-C 中按预期工作:

// Generates Error, as expected
@interface CWTestSubclass : CWTestFinalClass
@end

但是,我仍然可以在 Swift 中进行子类化

// Should fail, but works without error
class TestSubclass: CWTestFinalClass {

}

问题如何防止 Objective-C 类在 Swift 中被子类化?

最佳答案

Objective C 没有 final 关键字或类似的关键字。即使确实存在编译时属性或修饰符,也可以通过使用运行时 API 动态创建任何伪最终类的子类来轻松地将其搁置一旁。

Swift 编译器强制 Swift 可以阻止对 final 类进行子类化的尝试,但这不会阻止 Objective C 这样做(它不是通过 Swift 编译器编译的) .因此,添加了 objc_subclassing_restricted 属性,专门使 clang 强制子类化 final Swift 类的非法性。

即使有可能,使 Objective C 类最终化也没有太大好处。 Objective C 是一种更加动态的语言,它似乎遵循了 Python 的“我们都是成年人”的口头禅。

支持 final 类的最大原因是通知编译器哪些类是去虚拟化的候选者。但是 Objective C 总是使用动态调度,而且从不去虚拟化。

关于objective-c - 防止在 Swift 中子类化 Objective-C 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52729878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com