zoukankan      html  css  js  c++  java
  • swift class的虚函数表

    class NSObjectBase: NSObject {

        func Msg_Normal(){ }

        func Msg_Second(){}

        func Msg_Third(){}

        

        @objc func Msg_ObjcX(){}

        @objc dynamic func Msg_Objc_DynamicX(){ }

        

        func callTest(){self.Msg_Normal()}

        func callAgain(){self.Msg_Third()}

    }

    extension NSObjectBase{

        @objc func OcExtensionFunc(){}

    }

    class DerivedOcClass:NSObjectBase{

        override func Msg_Normal() {}

        override func OcExtensionFunc(){}

        override func Msg_Objc_DynamicX() {}

    }

    swiftc -emit-sil BaseClass.swift | xcrun swift-demangle > ClassFunc.silgen

    cat ClassFunc.silgen

    class NSObjectBase : NSObject {

      func Msg_Normal()

      func Msg_Second()

      func Msg_Third()

      @objc func Msg_ObjcX()

      @objc dynamic func Msg_Objc_DynamicX()

      func callTest()

      func callAgain()

    }

    extension NSObjectBase {

      @objc dynamic func OcExtensionFunc()

    }

    class DerivedOcClass : NSObjectBase {

      override func Msg_Normal()

      override dynamic func OcExtensionFunc()

      override dynamic func Msg_Objc_DynamicX()

    }

    sil_vtable NSObjectBase {

      #NSObjectBase.Msg_Normal!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.Msg_Normal() -> () // NSObjectBase.Msg_Normal()

      #NSObjectBase.Msg_Second!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.Msg_Second() -> () // NSObjectBase.Msg_Second()

      #NSObjectBase.Msg_Third!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.Msg_Third() -> () // NSObjectBase.Msg_Third()

      #NSObjectBase.Msg_ObjcX!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.Msg_ObjcX() -> () // NSObjectBase.Msg_ObjcX()

      #NSObjectBase.callTest!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.callTest() -> () // NSObjectBase.callTest()

      #NSObjectBase.callAgain!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.callAgain() -> () // NSObjectBase.callAgain()

    }

    sil_vtable DerivedOcClass {

      #NSObjectBase.Msg_Normal!1: (NSObjectBase) -> () -> () : @NSObjectBase.DerivedOcClass.Msg_Normal() -> () [override] // DerivedOcClass.Msg_Normal()

      #NSObjectBase.Msg_Second!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.Msg_Second() -> () [inherited] // NSObjectBase.Msg_Second()

      #NSObjectBase.Msg_Third!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.Msg_Third() -> () [inherited] // NSObjectBase.Msg_Third()

      #NSObjectBase.Msg_ObjcX!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.Msg_ObjcX() -> () [inherited] // NSObjectBase.Msg_ObjcX()

      #NSObjectBase.callTest!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.callTest() -> () [inherited] // NSObjectBase.callTest()

      #NSObjectBase.callAgain!1: (NSObjectBase) -> () -> () : @NSObjectBase.NSObjectBase.callAgain() -> () [inherited] // NSObjectBase.callAgain()

    }

    class BaseClass {

        func NormalFunc(){}

        @objc func ObjcFunc(){}

        @objc dynamic func ObjcDynamicFunc(){}

    }

    extension BaseClass{

        @objc func ExtensionNormal(){}

        func ExtenNoneOcNormal(){}

    }

    class DerivedClass:BaseClass{

        override func NormalFunc() {}

        override func ObjcFunc(){}

        override func ObjcDynamicFunc(){}

        override func ExtensionNormal(){}

    }

    extension DerivedClass{}

    class BaseClass {

      func NormalFunc()

      @objc func ObjcFunc()

      @objc dynamic func ObjcDynamicFunc()

      init()

      deinit

    }

    extension BaseClass {

      @objc dynamic func ExtensionNormal()

      func ExtenNoneOcNormal()

    }

    class DerivedClass : BaseClass {

      override func NormalFunc()

      override func ObjcFunc()

      override dynamic func ObjcDynamicFunc()

      override dynamic func ExtensionNormal()

      override init()

      deinit

    }

    sil_vtable BaseClass {

      #BaseClass.NormalFunc!1: (BaseClass) -> () -> () : @BaseClass.BaseClass.NormalFunc() -> () // BaseClass.NormalFunc()

      #BaseClass.ObjcFunc!1: (BaseClass) -> () -> () : @BaseClass.BaseClass.ObjcFunc() -> () // BaseClass.ObjcFunc()

    }

    sil_vtable DerivedClass {

      #BaseClass.NormalFunc!1: (BaseClass) -> () -> () : @BaseClass.DerivedClass.NormalFunc() -> () [override] // DerivedClass.NormalFunc()

      #BaseClass.ObjcFunc!1: (BaseClass) -> () -> () : @BaseClass.DerivedClass.ObjcFunc() -> () [override] // DerivedClass.ObjcFunc()

    }

  • 相关阅读:
    AIX上Oracle安装10204补丁出现写文件错误
    Oracle自定义函数
    表中最大分区数
    查询RMAN资料库——RMAN用户手册
    查询访问同一表的两个以上索引(三)
    管理RMAN资料库——RMAN用户手册
    查询访问同一表的两个以上索引(一)
    DDL语句为什么不能回滚
    JDBC运行出现ORA17410错误
    MySQL数据库操作类(转)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10564955.html
Copyright © 2011-2022 走看看