值类型与引用类型的比较

在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 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,292评论 3 25
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 共同点: 都可以将多个数据封装为一个整体 不同点: --1. 结构体只能封装数据 类可以封装行为--2.结构体在...
    LZM轮回阅读 1,362评论 0 1
  • 老公的工作行业属于传统行业,在2013年的时候还顺风顺水,发钱多多。在这个二线的省会城市,日子过得风生水起...
    虚怀若谷_f16f阅读 757评论 0 2
  • 在开往明月山的大巴上,看着道路向远方延伸,心下涌起久违的感觉。又出来了,好几个月了,由于身体一直不佳,周末经常侯在...
    身体棒棒阅读 209评论 2 1