Swift中 堆(heap)和栈(stack)的区别

1、内存空间分为堆空间和栈空间

2、堆->引用类型(对象、函数、闭包)  栈->值类型(结构体、枚举、元组)

3、值类型赋值->深拷贝  引用类型赋值->浅拷贝  

let a = 1
let c = a
// 值类型赋值会生成一个全新的c
// 引用类型赋值则是指向之前的对象的内存地址

 4、结构体与类的区别

复制代码
// 结构体
struct personT{
    var  age = 10
    var name = "小明"
}

var pt = personT()
var pt1 = pt
pt1.age = 20
print(pt.age) //10

//
class personC{
    var  age = 10
    var name = "小明"
}
let pc = personC()
let pc1 = pc
pc1.age = 30
print(pc.age)//30
/* 分析
 定义两个模型,一个是结构体,一个是类
 结构体是存在于栈中的值类型,赋值相当于深拷贝即拷贝一个全新的模型
 类是存在于堆中的引用类型,赋值相当于浅拷贝之前模型的内存地址<所以定义模型时可以用let 定义 定义pc其实是personC() 的内存地址 - 后续修改也是拿到内存地主对应的模型进行修改>
 swift建议都使用struct, swift对结构体已经进行了很大的优化
 */
复制代码

 

posted @   ZhangShengjie  阅读(333)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示