iOS 类与结构体的区别

作者: A_rcher34 | 来源:发表于2019-04-22 17:58 被阅读6次

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

    参考文献

    相关文章

      网友评论

        本文标题:iOS 类与结构体的区别

        本文链接:https://www.haomeiwen.com/subject/vitpwqtx.html