美文网首页
Swift 里的值类型与引用类型

Swift 里的值类型与引用类型

作者: 开了那么 | 来源:发表于2021-08-03 10:24 被阅读0次

Swift 里面的类型分为两种:

  • 值类型(Value Types):每个实例都保留了一分独有的数据拷贝,一般以结构体 (struct)、枚举(enum) 或者 元组(tuple)的形式出现。
  • 引用类型(Reference Type):每个实例共享同一份数据来源,一般以 类(class)的形式出现。
    接下来我们来一一介绍一下他们的区别

1、存储方式
值类型存储在栈区。 每个值类型变量都有其自己的数据副本,并且对一个变量的操作不会影响另一个变量。
引用类型存储在其他位置(堆区),我们在内存中有一个指向该位置的引用。 引用类型的变量可以指向相同类型的数据。

2、值类型和引用类型最基本的分别在复制之后的结果
当一个值类型被复制的时候,相当于创造了一个完全独立的实例,这个实例保有属于自己的独有数据,数据不会受到其他实例的数据变化影响:

    struct S { var data: Int = -1 }
    var a = S()
    var b = a                           // b 是 a 的拷贝
    a.data = 42                         // 更改 a 的数据,b 的不受影响
    println("\(a.data), \(b.data)")     // 输出结果 "42, -1"

复制一个引用类型的时候,实际上是默默地创造了一个共享的实例分身,两者是共用一套数据。因此修改其中任何一个实例的数据,也会影响到另外那个。

    class C { var data: Int = -1 }
    var x = C()
    var y = x                           // y 是 x 的拷贝
    x.data = 42                         // 更改 x 的数据,等于同时修改了 y
    println("\(x.data), \(y.data)")     // 输出结果 "42, 42"

3、从性能出发
导致Swift结构体(和枚举)与类的性能差异的三个维度是:

  • 复制消耗的成本;
  • 创建和销毁时花费成本;
  • 引用计数造成的成本

当我们想要建立一个新的类型的时候,怎么决定用值类型还是引用类型呢?当你使用 Cocoa 框架的时候,很多 API 都要通过 NSObject 的子类使用,所以这时候必须要用到引用类型 class。在其他情况下,有下面几个准则:

  • 什么时候该用值类型:
    • 要用==运算符来比较实例的数据时
    • 你希望那个实例的拷贝能保持独立的状态时
    • 数据会被多个线程使用时
  • 什么时候该用引用类型(class):
    • 要用==运算符来比较实例身份的时候
    • 你希望有创建一个共享的、可变对象的时候

Swift 里的值类型与引用类型

相关文章

  • Note 3 Swift (1)

    Swift学习笔记 变量与常量 变量 常量 值类型与引用类型 值类型 引用类型 数组与字典 数组 字典

  • Swift值类型&引用类型

    Swift值类型&引用类型 前言 值类型和引用类型是Swift中两种数据存储方式,简单来说值类型就是直接存储的值,...

  • 【极客班】Swift高级编程一

    Swift语言简介 值类型与引用类型 类型成员: 类与结构:类的实例是对象,结构的实例是值;类的存储是引用类型,堆...

  • swift的值类型和引用类型

    swift的类型有哪些?   swift的类型分为值类型和引用类型两种。值类型在传递和赋值时将进行复制,而引用类型...

  • Swift里的值类型与引用类型 ◉•⦿

    ◉ Swift里面的类型分为两种: 值类型(Value Types):每个实例都保留了一分独有的数据拷贝,一般以结...

  • Swift 里的值类型与引用类型

    Swift 里面的类型分为两种: 值类型(Value Types):每个实例都保留了一分独有的数据拷贝,一般以结构...

  • Swift使用(一)数据类型,常量、变量、元组

    Swift数据类型,常量、变量、元组 数据类型 Swift分为值类型和引用类型: 1、值类型分为枚举enum 和 ...

  • swift值类型与引用类型

    提出几个疑惑的问题: 1.值类型和引用类型的区别。2.swift中如何选择类与结构体。3.为什么swift3.0将...

  • swift 值类型与引用类型

    swift类型分为值类型和引用类型,最典型的对照是结构体和类。 定义一个结构体: structPointStruc...

  • Swift 一、类与结构体(下)

    一、异变方法 1.1 值类型添加/不添加mutating关键字的区别 Swift语言中的类型有值类型与引用类型之...

网友评论

      本文标题:Swift 里的值类型与引用类型

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