对象的内存布局:
- 第-个8个字节存储类相关的信息表的地址,
- 第二个8个存储引用计数相关的信息表的地址
- 后面开始存储实例属性的内存大小
Swift中多态的实现方式
-
底层实现与C++中的多态一致,采用的是虚表
-
根据在类信息地址找到虚表的首地址,虚表中存了类信息和函数的入口地址
class Animal { var age = 12 var num = 23 func sepak() { print("Animal-Speak") } func eat() { print("Animal-eat") } } class Dog: Animal { var weight: Int = 0 override func sepak() { print("Dog-sepak") } override func eat() { print("Dog-eat") } } class ErHa: Dog { var iq: Int = 0 } // 0x600001257bc0 /** A8 91 FB 01 01 00 00 00 03 00 00 00 00 00 00 00 0F 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00 */ let ani = Animal() ani.age = 15 ani.sepak() // 0x600001285800 /* 88 92 FB 01 01 00 00 00 03 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00 */ let dog = Dog() dog.age = 10 dog.weight = 20 // 0x600001285950 /** 88 F3 AD 0E 01 00 00 00 03 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00 1E 00 00 00 00 00 00 00 */ let erHa = ErHa() erHa.age = 10 erHa.weight = 20 erHa.iq = 30

网友评论