核心的区别是struct使用的时候是copy的(值传递), class使用的时候是引用的(引用传递)

struct为值类型,结构体和枚举都是值类型的,默认情况下,值类型的属性是不能从它的实例方法内部改变,要想用它的方法修改属性数据,就必须在方法前面加上mutating关键词。带有mutating关键词标志的方法,可以在方法内部修改这些值,并且方法返回后还有效,class则没有这个限制。

图片来源于https://iosgg.cn/2016/10/11/swift_class_struct/

值类型相对于引用类型是非常有优势的:

1.安全性
因为 Struct 是用值类型传递的,它们没有引用计数。

2.内存
由于他们没有引用数,他们不会因为循环引用导致内存泄漏。

3.速度
值类型通常来说是以栈的形式分配的,而不是用堆。因此他们比 Class 要快很多。

4.线程安全
值类型是自动线程安全的。无论你从哪个线程去访问你的 Struct ,都非常简单。

但是object-c不能调用struct,只能用class。所以在编程的时候也要根据需要来选择用class或者struct

Swift中为什么多用strcut以及它与class的区别相关推荐

  1. 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题

    swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer li ...

  2. Swift 中使用 SQLite——批量更新(事务处理)

    本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新. 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态 开始数据操作 如果数据操作成功,提交事 ...

  3. Swift 中使用 SQLite——打开数据库

    关于Swift中使用SQLite,接下来可能会分别从打开.增.删.改.查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开. 定义全局数据库访问句柄 /// 全局数据库访问句柄 pri ...

  4. 探索 Swift 中的 MVC-N 模式

    作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...

  5. Swift 中的内存管理详解

    这篇文章是在阅读<The Swift Programming Language>Automatic Reference Counting(ARC,自动引用计数)一章时做的一些笔记,同时参考 ...

  6. 怎样在swift中创建CocoaPods

    本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...

  7. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  8. Swift中依赖注入的解耦策略

    原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...

  9. swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实

    swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...

最新文章

  1. SpringMVC拦截器与异常处理
  2. mockito_Mockito:为什么您仍然应该欣赏InjectMocks注释
  3. Linux 技巧: Bash 测试和比较函数
  4. 接口测试并不只是测试参数和返回值
  5. 客户组网服务案列_信息报道丨云浮支撑服务中心2020年第五期
  6. TCP方式的网络通信【聊天器示例】
  7. 计算机专业 英语词汇大全(持续更新)
  8. Android 音视频开发 视频编码,音频编码格式
  9. java opts配置_JAVA_OPTS设置
  10. 新版“大伦敦规划”中的交通发展策略
  11. (150)FPGA面试题-Verilog实现2的幂次方乘法运算
  12. 多个Ajax请求成功后再执行后续方法
  13. selenium + 石墨文档 自动实现在固定位置写入文字
  14. Android Anatomy and Physiology
  15. 怎么把图片的边缘弄圆_怎么把图片边角变圆?
  16. VS2005 项目怎样添加“依赖”、“库目录”和“包含目录”
  17. http协议常见错误状态码(400,404,500等).
  18. 这个5G网优工程师也太牛了!手机丢了,自己找回来了!
  19. (转)春节后面试别人的经历总结之二,好岗位分享给还在找工作中的软件开发爱好者们(适合初级者看)...
  20. 朗坤环境递交注册:拟募资11亿 陈建湘家族色彩浓厚

热门文章

  1. 【筛质数】——朴素筛,埃式筛,欧拉筛
  2. 计算机语言就业排名,[回顾] 2012年几大编程语言就业趋势分析
  3. 陕西省综合管理计算机考试题,2013陕西省计算机等级考试试题 二级C试题考试题库...
  4. 宽度学习代码的一些问题
  5. 快手打开后不显示画面_快手怎么让别人看不见我发了作品
  6. Gorm之gorm.io/gorm源码
  7. 水泥路肩培土两用机对于工程建设的特性
  8. 面试官问:前后端分离项目,有什么优缺点?我说:没
  9. 2022年广东省安全员A证第三批(主要负责人)考试题及在线模拟考试
  10. 查看Matlab有哪些内置的图片