Swift 值类型,引用类型,深拷贝,浅拷贝,Copy,MutableCopy

本文详细介绍了Swift中的值类型与引用类型的区别,包括它们在赋值时的Copy行为。值类型在赋值时复制内存,确保独立状态,适合多线程环境;引用类型通过指针引用同一内存,适用于共享可变数据。同时,文章讨论了Copy和MutableCopy在不同类型中的深拷贝和浅拷贝表现。
摘要由CSDN通过智能技术生成

原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow

profile for Leo on Stack Exchange, a network of free, community-driven Q&A sites


前言:Swift相对应Objective C来说,它不再需要绝大部分对象继承自NSObject,所以Swift的类型和Objective C的变量类型也不一致。


Value Type/Reference Type

什么是值类型,引用类型?

二者最主要的差别在于当copy发生的时候,注意,当在Swift中使用赋值符号的时候发生的都是copy,这个在最后我会解释为什么。

Struct是值类型

struct S{
    var num = -1
}
var a = S()
var b = a
a.num = 10
print(b.num) //-1

可以看到,值类型拷贝后的内存是这个样子的

再来看看引用类型

class S{
   
    var num = -1
}
var a = S()
var b = a
a.num = 10
print(b.num) // 10

总结

值类型或者引用类型在赋值的时候都是Copy,值类型拷贝累实际的内存(value),而饮用类型只是拷贝了指针,仍然指向最开始的内存区域


什么是值类型or 引用类型?

  • Class的实例是引用类型
  • Swift方法类型是引用类型(在Swift中,方法也是一种类型)
  • 其余的都是值类型,像Array,Dictionary本质都是Struct。

值类型的优点

优点还是很明显的,每次得到的都是一个Copy,这样就可以放心的运行,没必要担心其他代码修改这个值。尤其是在多线程环境里。

值类型每次都会进行Copy吗?

并不是每次都是要copy的,当值并不会改变的时候,Swift并不会进行copy。例如let a = 1;let b = a.


什么时候用值类型/引用类型?

用值类型

  • 当你希望用==来比较的时候
  • 赋值后有独立的状态
  • 数据在多线程中使用

引用类型

  • 当你希望用===来比较的时候(注意,这里三个等号)
  • 创建共享的可变数据

Copy/MutableCopy

对于不可变类型,举例NSString
代码

   let str1 = NSString(string: 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值