Swift 值类型和引用类型
背景: 每个语言都会有值类型和引用类型的功能 定义: 类 是属于引用类型,通过引用计数来管理,我们在操作的时候,不会影响内存的布局, 比如 赋值知识复制一个指针,具体内容还是类以前的内容 指向它的内存地址 多一个引用计数, 增加了效率 有什么问题呢 如果类是通过属性或者方法的行为把数据传递出去,那么用户就可以得到这个指针,就可以手动进行修改里面的内容,这样对于程序来说是不安全的 值类型 : 存储在栈上面, 由系统分配和管理,那
值类型和引用类型的区别这点顺带说一下就行,引用类型的具体表现就是我们最常用的类,通过引用计数来管理,通常我们赋值等操作,只会复制一个指针,指向它所在的内存地址,多一个引用,引用计数就+1,增加了效率,但是不安全(我在Whats new in Swift4这篇博客中的Encoding and decoding中有提到).值类型我们也经常用,Int类型,char,struct都是值类型,将一个值类型变量赋给另一个值类型变量时,将复制包含的值,具有新的内存地址,但这样做是代价是昂贵的(Swift做了优化,后面会解释). 那什么又是值语义,假设这样的场景,你有一个Class,里面所有的属性(也是引用类型的)都是私有的private,你不想让外部直接用,外部如果需要使用,可以调用暴露的get方法,你把私有属性返回给他,但其实这个时候,这个属性已经不在是私有的了,因为引用类型的特点,外部已经拿到了私有属性的指针,可以对他进行任务操作,很不安全.