iOS 类与结构体的区别

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修饰
  • 类中不存在这个问题,因为累可以随意修改自己的成员变量

参考文献

  • https://www.jianshu.com/p/a9420d8bcf40
  • https://blog.csdn.net/Philm_iOS/article/details/81200510

你可能感兴趣的:(iOS 类与结构体的区别)