15.1 Swift深浅拷贝
来源:互联网 发布:java get 中文乱码 编辑:程序博客网 时间:2024/06/02 00:58
//结构体,值类型的赋值操作是深拷贝 struct Deep { var copy:Int = 0 } // 类,引用类型的赋值操作是浅拷贝 class Shallow { var copy:Int = 0 } /** 这就是深拷贝 ,但是是强引用 把d0完全复制给d1 d0 和 d1是两个不同的对象。内存地址不一样 */ var d0 =Deep.init() var d1 = d0 /** /Users/xiaoyulong/Desktop/swift/swiftLearn14/swiftLearn14/RootVC/RootViewController.swift:55:9: 'unsafeAddressOf' is unavailable: Removed in Swift 3. Use Unmanaged.passUnretained(x).toOpaque() instead. */// unsafeAddressOf(d0 as AnyObject) d1.copy =9 print("d0.copy==\(d0.copy)") print("d1.copy==\(d1.copy)") /** d0.copy==0 d1.copy==9 d0.copy 和 d1.copy不一样说明,他们两个就是不同的对象。说明是深拷贝 */ print("d0.Address==\(Unmanaged<AnyObject>.passUnretained(d0as AnyObject).toOpaque())") print("d1.Address==\(Unmanaged<AnyObject>.passUnretained(d1as AnyObject).toOpaque())") /** d0.Address==0x0000600000055180 d1.Address==0x0000600000055330 */ print("--------------------->") /** 这就是浅拷贝 但是是强引用 */ var s0 =Shallow.init() var s1 = s0 s1.copy =11 print("s0.copy==\(s0.copy)") print("s1.copy==\(s1.copy)") /** s0.copy==11 s1.copy==11 s0.copy 和 s1.copy一样说明,他们两个就是同一个的对象。说明是浅拷贝 如果s1提前释放掉,s0不就变成野指针了吗?不用担心,有ARC引用机制啊。s0判断引用计数为0也会自动释放掉的。 */ print("s0.Address==\(Unmanaged<AnyObject>.passUnretained(s0as AnyObject).toOpaque())") print("s1.Address==\(Unmanaged<AnyObject>.passUnretained(s1as AnyObject).toOpaque())") /** s0.Address==0x0000600000421b20 s1.Address==0x0000600000421b20 */ /** 这些都是系统来替我们做的,程序员不需要做。 */
0 0
- 15.1 Swift深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 如何成为一个技术“牛人”
- Centos 6 Docker配置桥接网络
- Spring使用JdbcTemplate实现对数据库操作
- 125. Valid Palindrome
- iOS 自定义导航栏笔记
- 15.1 Swift深浅拷贝
- iOS 集成 第三方 QQ
- css属性行高line-height的用法详解
- wordpress内核揭秘之day6_Permalink伪静态方法实现原理
- 15.2 Swift字符串的拷贝
- 永远不要高估一个人对你的情感
- 静态函数库 和 动态函数库
- WebSocket in ASP.NET Core
- app接口 封装通信接口