码迷,mamicode.com
首页 > 其他好文 > 详细

swift学习笔记(三)关于拷贝和引用

时间:2014-06-21 22:16:31      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:class   使用   数据   string      cti   

在swift提供的基本数据类型中,包括Int ,Float,Double,String,Enumeration,Structure,Dictionary都属于值拷贝类型。

闭包和函数同属引用类型

捕获则为拷贝。捕获即定义这些常量和变量的原作用域已不存在,闭包仍然可以在闭包函数体内引用和修改这些值

class属于引用类型。

Array的情况稍微复杂一些,下面主要对集合类型进行分析:

一、关于Dictionary:无论何时将一个字典实例赋给一个常量,或者传递给一个函数方法时,在赋值或调用发生时,都会发生拷贝。

如果字典实例中存储的keys和Value是值类型,当赋值或调用发生时,他们都会被拷贝。

如果keys和Value中存储的是引用类型,再拷贝时,拷贝的也是引用,而不是引用对应的类实例或函数。

二、关于Array:

因为Array能提供接近C语言的性能,并且拷贝行为只会在必要的时候才会发生。

通常情况下,将一个数组赋值给一个常量或变量的时候,传递的是引用,而不是拷贝的副本。

只有在以下情况下才会发生值拷贝:数组的长度大小有可能被改变时,及对数组进行插入,增加,删除或者使用范围下标去替换这一范围内的元素时,才会引起数组的值拷贝。

当拷贝发生时,其拷贝方式,与字典的拷贝方式相同。

注意:当使用下标语法,修改数组的内容时,不会引起数组的拷贝。因为下标语法并不会引起数组长度的改变,改变的只是数组的内容。


当操作一个数组时,或将其传递给函数以及方法调用时,很有必要确定这个数组是一个唯一的拷贝。

特别是当一个数组被多个变量引用时,只需要对一个变量,进行unshare操作,即可保证此变量为次数组的一个独立拷贝。


unshare与copy的区别:

unshare被调用时,仅在确有必要时才会创建数组的拷贝

copy属于强制拷贝,会在任何时候都创建一个新的拷贝,即使引用已经是一个唯一引用。

所以,如果仅需要保证你对数组的引用是唯一引用,请调用unshare方法,而不是copy方法

swift学习笔记(三)关于拷贝和引用,布布扣,bubuko.com

swift学习笔记(三)关于拷贝和引用

标签:class   使用   数据   string      cti   

原文地址:http://blog.csdn.net/jidiao/article/details/32067783

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!