核心的区别是struct使用的时候是copy的(值传递), class使用的时候是引用的(引用传递)
struct为值类型,结构体和枚举都是值类型的,默认情况下,值类型的属性是不能从它的实例方法内部改变,要想用它的方法修改属性数据,就必须在方法前面加上mutating关键词。带有mutating关键词标志的方法,可以在方法内部修改这些值,并且方法返回后还有效,class则没有这个限制。
图片来源于https://iosgg.cn/2016/10/11/swift_class_struct/
值类型相对于引用类型是非常有优势的:
1.安全性
因为 Struct 是用值类型传递的,它们没有引用计数。
2.内存
由于他们没有引用数,他们不会因为循环引用导致内存泄漏。
3.速度
值类型通常来说是以栈的形式分配的,而不是用堆。因此他们比 Class 要快很多。
4.线程安全
值类型是自动线程安全的。无论你从哪个线程去访问你的 Struct ,都非常简单。
但是object-c不能调用struct,只能用class。所以在编程的时候也要根据需要来选择用class或者struct