关于Swift中的值类型(Value Types)与引用类型(Reference Type)

关于Swift中的值类型(Value Types)与引用类型(Reference Type),第1张

概述Swift里面的类型分为两种: ●值类型(Value Types):每个实例都保留了一分独有的数据拷贝。如结构体 (struct)、枚举(enum) 和元组(tuple)。 ●引用类型(Reference Type):每个实例共享同一份数据来源,如类(class)。 值类型与引用类型的区别在于: 值类型和引用类型最基本的区别在于复制之后的结果。当一个值类型被复制的时候,相当于创造了一个完全独立的实

Swift里面的类型分为两种:
●值类型(Value Types):每个实例都保留了一分独有的数据拷贝。如结构体 (struct)、枚举(enum) 和元组(tuple)。
●引用类型(Reference Type):每个实例共享同一份数据来源,如类(class)。

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

// 下面是一个值类型的例子struct MyStruct { var data = -1 }var s1 = MyStruct()var s2 = s1                           // s2是s1的拷贝s1.data = 42                         // 值类型,改变s1的值,s2不受影响println("\(s1.data),\(s2.data)")     // 输出结果 "42,-1"

值类型就好像身份z复印件一样,复印出来之后,修改原件上面的内容,复印件上的内容不会改变。
复制一个引用类型的时候,实际上是创造了一个共享的实例分身,两者是共用一套数据(数据存储的地址指向同一块内存)。因此修改其中任何一个实例的数据,也会影响到另外一个。
引用类型示例代码如下:

// 下面是一个引用类型的例子class MyClass { var data: Int = -1 }var x = MyClass()var y = x                           // y是x的拷贝x.data = 42                         // 引用类型,更改x的值,等于同时修改了yprintln("\(x.data),\(y.data)")     // 输出结果 "42,42"

值类型较引用类型来说,会让你更容易在大量代码中理清状况。如果你总是得到一个独立的拷贝出来的实例,你就可以放心它不会被你app里面的其他部分代码默默地修改。这在多线程的环境里面是尤为重要的,因为另外一个线程可能会在暗地里修改你的数据。因此可能会造成严重的程序错误,这在调试过程中非常难以排除。 由于差别主要在于修改数据的后果,那么当实例的数据只读,不存在需要更改的情况下,用哪种类型都是没有分别的。

总结

以上是内存溢出为你收集整理的关于Swift中的值类型(Value Types)与引用类型(Reference Type)全部内容,希望文章能够帮你解决关于Swift中的值类型(Value Types)与引用类型(Reference Type)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存