Swift中为什么多用strcut以及它与class的区别
核心的区别是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的区别相关推荐
- 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题
swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer li ...
- Swift 中使用 SQLite——批量更新(事务处理)
本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新. 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态 开始数据操作 如果数据操作成功,提交事 ...
- Swift 中使用 SQLite——打开数据库
关于Swift中使用SQLite,接下来可能会分别从打开.增.删.改.查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开. 定义全局数据库访问句柄 /// 全局数据库访问句柄 pri ...
- 探索 Swift 中的 MVC-N 模式
作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...
- Swift 中的内存管理详解
这篇文章是在阅读<The Swift Programming Language>Automatic Reference Counting(ARC,自动引用计数)一章时做的一些笔记,同时参考 ...
- 怎样在swift中创建CocoaPods
本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- Swift中依赖注入的解耦策略
原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...
- swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实
swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...
最新文章
- SpringMVC拦截器与异常处理
- mockito_Mockito:为什么您仍然应该欣赏InjectMocks注释
- Linux 技巧: Bash 测试和比较函数
- 接口测试并不只是测试参数和返回值
- 客户组网服务案列_信息报道丨云浮支撑服务中心2020年第五期
- TCP方式的网络通信【聊天器示例】
- 计算机专业 英语词汇大全(持续更新)
- Android 音视频开发 视频编码,音频编码格式
- java opts配置_JAVA_OPTS设置
- 新版“大伦敦规划”中的交通发展策略
- (150)FPGA面试题-Verilog实现2的幂次方乘法运算
- 多个Ajax请求成功后再执行后续方法
- selenium + 石墨文档 自动实现在固定位置写入文字
- Android Anatomy and Physiology
- 怎么把图片的边缘弄圆_怎么把图片边角变圆?
- VS2005 项目怎样添加“依赖”、“库目录”和“包含目录”
- http协议常见错误状态码(400,404,500等).
- 这个5G网优工程师也太牛了!手机丢了,自己找回来了!
- (转)春节后面试别人的经历总结之二,好岗位分享给还在找工作中的软件开发爱好者们(适合初级者看)...
- 朗坤环境递交注册:拟募资11亿 陈建湘家族色彩浓厚
热门文章
- 【筛质数】——朴素筛,埃式筛,欧拉筛
- 计算机语言就业排名,[回顾] 2012年几大编程语言就业趋势分析
- 陕西省综合管理计算机考试题,2013陕西省计算机等级考试试题 二级C试题考试题库...
- 宽度学习代码的一些问题
- 快手打开后不显示画面_快手怎么让别人看不见我发了作品
- Gorm之gorm.io/gorm源码
- 水泥路肩培土两用机对于工程建设的特性
- 面试官问:前后端分离项目,有什么优缺点?我说:没
- 2022年广东省安全员A证第三批(主要负责人)考试题及在线模拟考试
- 查看Matlab有哪些内置的图片