美文网首页iOS开发
swift name mangling

swift name mangling

作者: _浅墨_ | 来源:发表于2021-06-28 18:44 被阅读0次
    name mangling
    import CoreData
    import Foundation
    
    @objc(Location)
    public class Location: NSManagedObject {}
    

    (Location) 有什么作用?

    这实际上是@objc 属性的一部分。 Swift 编译器使用一种名为 name mangling 的机制在内部重命名方法,以便可以唯一标识它们。

    如果在同一个项目中有两个名为 copyFiles 的方法,编译器如何知道特定代码位指的是哪一个呢?因此必须有一种方法来唯一地标识每个方法,以便正确解析所有方法调用。

    如果我们的项目只有 Swift 代码,则 Name mangling 工作正常。但是因为可以在同一个项目中混合 Swift 和 Objective-C 代码,有时会在这种“混合”项目中遇到麻烦,因为由于名称修改,Objective-C 无法正确识别 Swift 类。

    这在处理归档数据时经常发生,因为归档数据保存了类名。当 Objective-C 无法将它收到的名称与已知类关联时,将会报错。

    这是 @objc(Location)(或类似的)符号发挥作用的地方。括号内的部分,告诉编译器,Objective-C 代码将使用该名称来引用这个特定的类。

    相关文章

      网友评论

        本文标题:swift name mangling

        本文链接:https://www.haomeiwen.com/subject/pwgejltx.html