Fork me on GitHub

Swift 值类型与引用类型

  作为 Swift 和 OC 区别较为明显的一个 case,这个话题往往容易被人提及,不过随着大家对它了解的深入,得到的结论也变得更加丰富,为了方便记忆,这里还是罗列一下 Swift 中值类型和引用类型之间的差异性。

  二者之间存在差异,在 Swift 中,值类型,存放在栈区;引用类型,存放在堆区。

  其实我之前的文章也有提到,Swift 中的基本类型都是 值类型 的,这也可以表现出官方的态度。所以,在 Swift 中,能用 struct 实现的功能,就不需要使用 class。

class 的如下功能是 struct 没有的:

  • 可以继承,子类可以使用父类的熟悉和方法。
  • 类型转换时可以在运行时检查和解释一个示例的类型。
  • 可以用 deinit 来释放资源。
  • 一个类对象可以被多次引用。

struct 也有如下优势:

  • 结构较小,适用于复制操作,相比一个 class 的实例被多次引用,struct 更加安全。
  • 无需担心内存泄漏或者多线程冲突的问题。

总结

  二者各有优劣,不过 Swift 中的 struct、enum 相对于 OC 已经有了极大的提升,个人还是推荐优先考虑 struct,当遇到瓶颈时再选择用 class 来完成需求。

------------- 本文结束感谢您的阅读 -------------