-
数据类型:struct是值类型,class是引用类型。
- 值类型变量直接包含数据,赋值时也是值拷贝,或者叫深拷贝,所以多个变量的操作不会相互影响。
- 引用类型变量存储的是对数据的引用地址,后者称为对象,赋值时,是将对象的引用地址复制过去,也叫浅拷贝,因此若多个变量指向同一个对象时,操作会相互影响。
- 值类型数据没有引用计数,也就不会因为循环引用导致内存泄漏,而引用类型存在引用计数,需要小心循环引用导致的内存泄漏
- 拷贝时,struct是深拷贝,拷贝的是内容,class则需要选用正确的深浅拷贝类型。
- 因为值类型数据是深拷贝,所以是线程安全的,而引用类型数据则不是
property的初始化:初始化属性时,class 需要创建一个带形参的constructor;struct可以把属性放在默认的constructor 的参数里。
immutable变量:swift用var和let区分可变数据和不可变数据,struct遵循这个特性;对class则不适用。
mutating function:struct 的 function 改变 property 时,需加上 mutating,而 class 不用。
速度:struct分配在栈中,class分配在堆中,也就意味着struct更迅速。
NSUserDefaults:struct 不能被序列化成 NSData 对象,class可以。
继承: struct不可以继承,class可以继承。
swift与oc混合开发时,oc调用swift需要继承NSObject,这就导致了class可以继承,所以可以调用class,但struct不能继承,所以不能调用struct
【swift】struct与class 的区别
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...