美文网首页
值类型与引用类型的比较

值类型与引用类型的比较

作者: 半日浮生_iOSer | 来源:发表于2016-12-04 18:39 被阅读19次

在swift中定义类型方法有很多种,其中一种就是以,引用和值来区分的。具体定义如下:

●值类型(Value Types):每个实例都保留了一分独有的数据拷贝,一般以结构体 (struct)、枚举(enum) 或者元组(tuple)的形式出现。

●引用类型(Reference Type):每个实例共享同一份数据来源,一般以类(class)的形式出现。

至于如何具体的来区分和理解这两者可以用一个具体的例子来表示。

##### 值类型

以值类型定义一个对象   let  a: [String] = ["值类型"1,"值类型2"]  (Array为值类型)

如果这时候重新声明一个元素   var b: [String] = a  (let  和 var 对值类型和引用类型无影响,这里声明为var是因为接下来会修改b的内容)

此时(不考虑swift做的优化)a与b应该是不同的对象,因为是拷贝,所以a与b内容是相同的,但是内存已经不同因为a与b已经是两个完全不同的对象了(但是此时在代码里测试时发现a与b地址还是一样的,这是因为swift对值类型做过优化,copy之后只要不对b做修改,那么a和b仍为同一个对象,这样做为了减少内存的消耗)。

这时候对b做修改  b.append("值类型3")  此时b得知变为["值类型"1,"值类型2","值类型3"]而a任然是["值类型"1,"值类型2"]  a并没有跟着b的值而变化,此时a与b内存地址也不相同。

##### 引用类型

以引用类型定义一个对象  let c: UIView = UIView() (UIView为class引用类型)

将c赋值给d  let d: UIView = c (对于引用类型的赋值没有copy的,所以对象c和d为同一个对象,修改c或者d里面的值时,另一个对象里面对应的值也会跟着变化,因为这两个本就是同一个对象)

总结,值类型和引用类型最大的区别就是复制时的变化。值类型是生成一个新的对象,而引用类型使用同一个对象。

相关文章

  • 值类型与引用类型的比较

    在swift中定义类型方法有很多种,其中一种就是以,引用和值来区分的。具体定义如下: ●值类型(Value Typ...

  • javascript复习笔记一(变量类型与计算)

    变量类型:分为值类型与引用类型 一、值类型与引用类型 值类型:存储的是具体的值(undefined、Boolean...

  • JavaScript中的浅拷贝与深拷贝

    值类型与引用类型 谈浅拷贝与深拷贝之前,我们需要先理清一个概念,即值类型与引用类型。 什么是值类型与引用类型?这要...

  • 深拷贝与浅拷贝

    一.引用类型与值类型 我们都知道,js有两种基本类型,引用类型与值类型。引用类型的“=”只是拷贝了引用,而基本类型...

  • Note 3 Swift (1)

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

  • C#中数据到底存在堆上还是栈上

    C#的栈与堆 首先复习一下值类型与引用类型 1. 值类型与引用类型 值类型:基本数据类型([int,long,fl...

  • 装箱拆箱Day0817

    //值类型和引用类型之间的转换称为装箱与拆箱 //装箱是值类型转化为引用类型 //拆箱是引用类型转化为值类型 in...

  • JAVA8新特性

    (1)==的比较方式:比较基本类型,比较的是基本类型的值;比较引用类型,比较的是引用类型的地址。 (2)equal...

  • JS基本类型、引用类型梳理

    原始值类型与引用值类型 ECMAScript规范中定义了变量的两种类型:原始值类型和引用值类型。区别两种类型的直接...

  • ==和equals的区别

    == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址 Equals的话...

网友评论

      本文标题:值类型与引用类型的比较

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