1、值类型/引用类型

  • 在 Swift 语言中,所有的类型都可以被分为 “值类型” 或者 “引用类型”,可以将其理解为函数参数传递的方式。

    • 值类型表示的是将它传递给一个方法的时候,使用的是复制;将它赋值给另一个变量的时候也是如此。修改得到复制的时,修改的也仅仅是复制的值,而不是原来的那份。
    • 引用类型存储在堆中,即使是一个常量指针,也会导致引用计数增加。当把一个常量指针所指向的对象传递给一个方法时,传递的是这个对象的指针。如果这个方法修改了这个对象,那么它修改的就是存储在堆中的那个对象。
  • 从程序的角度来看,值类型和引用类型是相对的一个概念。其中的差别就在于:对新的对象产生赋值等指向性的操作之后,再次操作赋值对象或被赋值对象是否会同步于另外一个对象。

  • 在 Swift 语言中,大多数类型都是值类型的,但是也有一些特殊情况,比如可以在函数参数定义中使用 inout 关键字将参数定义为引用类型。

    // a,b 都是引用类型
    func swapT<T>(inout a:T, inout b:T)

2、值类型/引用类型数据结构

  • Swift 中的数据结构主要由以下三大类构成:类(Class)、结构体(Structure)和枚举(Enumeration)。

    • 三类数据结构中,结构体和枚举传递存储的是复制后的值,属于值类型。
    • 类传递的是对象的指针,属于引用类型。
  • 和其它很多面向对象语言一样,类的对象存储在堆(Heap)中,类的指针保存在栈(Stack)中。

    • 堆中的对象系统会自动为我们管理(ARC),这样就不用我们去开辟和释放内存空间了。
    • 一旦没有指针指向对象,那么对象马上会被清理掉,这种机制叫做自动引用计数。
  • 定长的结构体和枚举是直接保存在栈上的,变长的结构体和枚举需要堆内存的配合。栈的空间有限,运行速度更快。

Swift 值类型/引用类型的更多相关文章

  1. 30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法

    一:值类型/引用类型的区别      值类型主要包括简单类型,枚举类型,和结构体类型等,值类型的实例通常被分配在线程堆栈上面变量保存的内容是实例数据本身.引用类型被分配在托管堆上,变量保存的是地址.引 ...

  2. 数往知来C#之接口 值类型与引用类型 静态非静态 异常处理 GC垃圾回收 值类型引用类型内存分配<四>

    C# 基础接口篇 一.多态复习 使用个new来实现,使用virtual与override    -->new隐藏父类方法 根据当前类型,电泳对应的方法(成员)    -->override ...

  3. Swift 值类型和引用类型

    Swift中的类型分为两类:一,值类型(value types),每个值类型的实例都拥有各自唯一的数据,通常它们是结构体,枚举或元组:二,引用类型(reference types),引用类型的实例共享 ...

  4. Swift 值类型和引用类型的内存管理

    1.内存分配 1.1 值类型的内存分配 在 Swift 中定长的值类型都是保存在栈上的,操作时不会涉及堆上的内存.变长的值类型(字符串.集合类型是可变长度的值类型)会分配堆内存. 这相当于一个 &qu ...

  5. Swift - 值类型与引用类型的初步探究

    前言 swift中的结构体和类在组成和功能上具有一定的相似性.两者都可以含有成员属性.成员方法用于数据存储和功能性模块封装.往往造成不知如何对二者进行区分和使用 值类型概念和引用类型概念 值类型的概念 ...

  6. 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别

    C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程 ...

  7. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

    引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...

  8. C# 语法二 值类型引用类型

    1.值类型 2.引用类型 一 值类型 值类型存放在栈中,引用类型存放在堆中. 值类型有:数值.布尔.字符,例如:int i;bool i2;char cr='a'; 二 引用类型 大多数类型是引用类型 ...

  9. [No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

    引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...

随机推荐

  1. 【Python】使用torrentParser1.03对多文件torrent的分析结果

    Your environment has been set up for using Node.js 8.5.0 (x64) and npm. C:\Users\horn1>cd C:\User ...

  2. 【Python】torrentParser1.01

    在昨天的版本上做了一些改进,如增加getAll,修改getSingleFileName等 代码: #-------------------------------------------------- ...

  3. .net 关于匿名类型的特性

    匿名类型 1: var n1 = new { name = "name1", age = 40 }; 2: var n2 = new { name = "name2&qu ...

  4. LintCode: 3 Sum

    C++ 把3个数求和,转变为2个数求和 1. 把数组排序 2. 注意过滤重复值 3. 从前到后遍历,游标i 4. 从后边数中找start + end = -arr[i]的2 sum 5. start ...

  5. vSphere Replication:虚拟机的保护伞

    http://server.zdnet.com.cn/server/2013/0401/2151318.shtml ZDNet至顶网服务器频道 04月01日 新闻消息: 保护IT环境的一个基本方面就是 ...

  6. Spring4.2 集成ActiveMQ5.14

    1:libs 2:web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...

  7. SQL Server还原数据库

    http://www.cnblogs.com/ggll611928/p/6377545.html 恢复数据库: 1.分离数据库以断开当前的访问连接. 2.附加数据库mdf文件. 3.执行RESTORE ...

  8. PC版收音机—龙卷风收音机

      龙卷风收音机-龙卷风   文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  9. 二、Django用Eclipse编写一个登录界面

    一.Django用Eclipse编写一个登录界面 二.Django用Eclipse编写一个登录界面Ajax和Django交互 各软件版本:Python 2.7.14,django 1.6.11 原来已 ...

  10. HDU 4585 平衡树Treap

    点击打开链接 题意:给出n组数,第一个数是id.第二个数是级别.每输入一个.输出这个人和哪个人打架,这个人会找和他级别最相近的人打,假设有两个人级别和他相差的一样多,他就会选择级别比他小的打架. 思路 ...