iOS 类与结构体的区别
2019-04-22 本文已影响6人
A_rcher34
swift中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会复制指针。这是两者之间的区别就是两个类型的区别。
举例:
class Temperature {
var value: Float = 37.0
}
class Person {
var temp: Temperature?
func sick() {
temp?.value = 41.0
}
}
let A = Person()
let B = Person()
let temp = Temperature()
A.temp = temp
B.temp = temp
执行A.sick()
A与B的temp的值都为41
因为Temperature是class,为引用类型,所以A与B的temp都指向了一个地址。当A的temp修改时,B的temp随之改变。如果Temperature的类型改为struct,就会为值类型,则A与B之间的temp不会相互影响。
内存中,引用类型(例如类)是存在堆上,而值类型(例如结构体)是存在栈上。栈比堆的速度快很多,所以苹果官方推荐使用结构体,可以提高APP运行的效率。
class的功能:
- class可以被继承,子类可以使用父类的特性和方法
- 可以被多次引用
- 由程序员初始化和释放,或者在程序结束时可能被系统回收
struct的功能:
- 结构较小,适用于复制操作,比一个class的实例被多次引用更加安全
- 无需担心内存泄露(因为栈区对象出栈后就会被释放)或多线程冲突问题(因为使用时会复制一个新的对象,不会出现多线程操作一个对象的情况)
修改成员变量的方法:
- 在结构体中,对于要修改成员变量的方法,要用mutating修饰
- 类中不存在这个问题,因为累可以随意修改自己的成员变量