Struct
和
Int
一样是值类型 (Value Type),但如果是引用类型(Reference Type) 比如类 class,就不太一样。
Swift class 在底层实现事实上是一个 Objectivce C Class(根据 mikeash 的
这个视频
Xode 8, Swift 3),我们创建一个新的 Swift class 实例的时候,会在堆上 (heap) 分配一块比较大的内存,用来保存诸如
type
,
reference count
之类的信息,在栈上 (stack) 只分配一个指针,指向堆上的这块内存。所以对一个
class
执行
MemoryLayout
效果如下:
1 2 3 4 5 6 7 8
class SampleClass { let number: UInt32 let flag: Bool } MemoryLayout<SampleClass>.size // returns 8 MemoryLayout<SampleClass>.alignment // returns 8 MemoryLayout<SampleClass>.stride // returns 8