美文网首页
iOS知识点-8.类(class)和结构体(struct)有什么

iOS知识点-8.类(class)和结构体(struct)有什么

作者: 萌小奇 | 来源:发表于2018-12-09 18:16 被阅读20次
    Swift Basics
    1. 类(class)和结构体(struct)有什么区别?

    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()
    

    上面这段代码,由于Temperature是class,为引用类型,故A的temp和B的temp指向同一个对象。A的temp修改了,B的temp也随之修改。这样A和B的temp的值都被修改成了41.0。如果将Temperature改为struct,为值类型,则A的temp修改不影响B的temp。

    内存中,引用类型诸如类是在堆(heap)上,而值类型诸如结构体是在栈(stack)上进行存储和操作。相比于栈上的操作,堆上的操作更加复杂耗时,所以苹果官方推荐使用结构体,这样可以提高App运行效率。

    class有这几个功能struct么有的:

    • class可以继承,这样子类可以使用父类的特性和方法
    • 类型转换可以在runtime的时候检查和解释一个实例的类型
    • 可以用deinit来释放资源
    • 一个类可以被多次引用

    struct也有这样几个优势:

    • 结构较小,适用于复制操作,相比于一个class的实例被多次引用更加安全
    • 无须担心内存memory leak或者多线程冲突问题
    上一题 目录 下一题

    相关文章

      网友评论

          本文标题:iOS知识点-8.类(class)和结构体(struct)有什么

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