博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 值类型/引用类型
阅读量:7109 次
发布时间:2019-06-28

本文共 772 字,大约阅读时间需要 2 分钟。

1、值类型/引用类型

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

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

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

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

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

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

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

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

转载地址:http://usvhl.baihongyu.com/

你可能感兴趣的文章
异步读写(ReadFileEx和ReadFile)之overlapped
查看>>
51nod1582-n叉树
查看>>
Android重绘ListView高度
查看>>
Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
查看>>
SageMath: 符号计算
查看>>
校园论坛与校园沟通平台的未来
查看>>
Redis List数据类型
查看>>
php 下载保存文件保存到本地的两种实现方法
查看>>
Azure IoT 技术研究系列4
查看>>
《人月神话》阅读笔记01
查看>>
Tree
查看>>
jQuery的Dom插入操作图示
查看>>
配置舒适的工作环境
查看>>
UGUI代码分析
查看>>
蓝鲸财经新闻记者实战培训
查看>>
Tcpdump Manul
查看>>
经典计算机算法设计方法(9) -- 迭代
查看>>
算法面试题解答(三)
查看>>
字典的创建和使用
查看>>
mysql 启动不了了
查看>>