zoukankan      html  css  js  c++  java
  • Swift 值类型/引用类型

    1、值类型/引用类型

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

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

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

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

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

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

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

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

  • 相关阅读:
    dd if=/dev/zero of=/dev/null 使用
    Linux 下的dd命令使用详解以及dd if=/dev/zero of=的含义
    windows 以及 linux 查看时间
    Linux下vi命令大全(文件修改)
    python test online
    python ssh登录下载上传脚本
    python telnet 中的数据判断(或者执行cmd后返回的数据 OperatingSystem.Run)
    python 转化串口中的数据 ,并分组判断
    python cmd下关闭exe程序(关闭浏览器驱动)
    robot 网卡连接情况
  • 原文地址:https://www.cnblogs.com/QianChia/p/8628678.html
Copyright © 2011-2022 走看看