Swift中的Reference Type和 Values Type

本文介绍了Swift中的Reference Type(引用类型)和Value Type(值类型),强调了值类型在赋值时的写时拷贝特性。讨论了四种类型的嵌套情况,并指出在iOS开发中最常见的是引用类型嵌套值类型。Swift中的String、Array和Dictionary作为值类型,能有效防止外部修改的影响,确保数据安全性。文章通过Objective-C中的例子进一步解释了这一概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swift2.0今年发布了,今天记录一下Swift中涉及到的Reference Type(引用类型)和Values Type(值类型).

在Swift2.0中Int ,String,Array,Dictionary,boolean都是值类型, 类是属于引用类型中的一种.

值类型在赋值给其他变量的时候会复制内容,引用类型在赋值给其他变量时引用这个类型值,就有点类似Objective-C中的指针一样.其实,我们在值类型的赋值的时候,并不是立刻产生副本,而是在有绝对必要的情况下才会产生副本, 而这一切都是有Swift后台程序自动为我们管理以达到运行的时候性能最优.

然而在开发中我们可能会遇到下列四种情况:
1. 引用类型嵌套引用类型
2. 值类型嵌套值类型
3. 引用类型嵌套值类型
4. 值类型嵌套引用类型

就一个原则:值类型有一个写时拷贝特性(复制给另外一个值后,在写修改后才进行拷贝操作) ,不管哪种引用类型在赋值给另外的值时,都只是拷贝的是引用;而值在 引用类型嵌套值类型这种情况中时,值并没有被拷贝一份值出来,其他三种情况符合一般情况

从以上的原则不难看出,我们在iOS开发中用的最多的就是引用类型嵌套值类型。因为在定义数据模型层的时候,我们要用一个类包含一些值类型的数据,所以我们必须要知道这四种嵌套类型的赋值机制,而在定义数据模型层的时候就用到的第三种方式, 这种方式就是引用类型嵌套值类型,修改引用类型的内部值的时候要真实地修改到其他值,不能只是修改到它的副本。

等等 , 我讲了这么多,貌似没有什么用啊!
错 , 只是多到你都遗忘了

在Swift的世界里面 String, Array, Dictionary都是值类型,在向Array中添加AnyObject的时候是不是 值类型中嵌套了引用类型呢! 其实你发现然而并没有什么卵用!!

那好吧! 我举一个在Objective-C中的例子你就懂了!

@property (nonatomic,copy) NSString *string;

很多iOS开发者都在这么写,但是他们并不知道copy用在这个地方是有什么用处,用在这个地方的用处是: 当其他对象A赋值给string 时要经过拷贝一份到内存中,然后用string指针指向这片内存,这样就能防止对象A被修改后感染到string对象,这样才能保证对象的不变性.

Swift中使用String类型,那就直接解决了这个问题,同理:在Swift中的Dictionary和Array类型也同样是这样设计的….. 如果你真的要Reference Type
Swift,在Foundation中同样也有对应的 NSDictionary NSArray NSString的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值