Swift-内存管理(高级)
来源:互联网 发布:csol大刀优化软件 编辑:程序博客网 时间:2024/06/05 23:48
Swift-内存管理(高级)
/* 5、隐式强引用 */print("\n5、隐式强引用")class Student { var name:String init(name:String) { self.name = name } func show() { print("name=\(name)") } deinit { print("\(name) deinit") }}//此时,stu0和stu1都引用了同一个对象var stu0:Student? = Student(name:"Tom")var stu1 = stu0stu0 = nilstu1 = nil//对象加入数组中,对象如果使引用数据类型,那么数组会强引用该对象(即数组让该对象的引用计数+1)var stuArray = [Student(name:"san"),Student(name:"si")]stuArray[0].name = "zhangsan"//(1)当某个对象不再属于数组时,该对象引用计数-1//数组本身被销毁时,它包含的所有对象不再属于它,因此如果数据是引用数据类型,它的引用计数将会-1stuArray.remove(at: 0)/* 6、局部和全局引用 (1)作用域(2)生命周期 */print("\n6、局部和全局引用")/* 7、闭包属性引起的循环强引用 */print("\n7、闭包属性引起的循环强引用")class CycleRef{ var a:Int = 8 //如果闭包属性中没有直接或间接访问self,就不会产生循环引用 lazy var clouser: ()->Void = {// print("clouser") //默认闭包会对它访问的对象执行强引用 [unowned self] in //使用unowned使其变为弱引用 print("a=\(self.a)") //或以下方法// [weak self] in// print("a=\(self!.a)")//使用weak可能存在self为空时,需要对其进行解包或者判空,一般使用unowned居多 } deinit { print("deinit") }}var cr:CycleRef? = CycleRef()//引用计数+1//前提:闭包或者函数是引用数据类型cr!.clouser() //引用计数+()? 闭包强引用了对象,对象调用闭包,循环引用cr = nil //引用计数-1
1 0
- Swift-内存管理(高级)
- Swift-深浅拷贝与内存管理(高级)
- Swift-内存管理(初级)
- Swift内存管理(ARC)
- Swift-析构方法与内存管理(初级)
- Swift-内存管理
- swift 内存管理
- Swift中的内存管理
- Swift中的内存管理
- swift - 内存管理
- swift - 内存管理
- Swift OC 内存管理
- Swift--15内存管理
- Swift中的内存管理
- OC高级内存管理
- 内存管理高级
- OC 内存高级管理
- 内存管理高级
- ESP8266 机智云 开发环境搭建(二)安装VM Tools 工具
- 集合框架_Map集合概述和特点
- OGRE的SDK编译安装 version 1.9 (不完全记录)
- python学习笔记1--数据类型
- Tomcat配置问题解决方法
- Swift-内存管理(高级)
- 自定义控件之简易Tab结构
- 腾讯认证QQ空间秒升级为专业版方法!
- zoj1200
- bash环境GIT仓库基本操作(2)
- Hadoop 伪分布式配置
- ActiveMQ之HelloWorld
- Mybatis中通过generator生成mapper、Dao、mapper.xml
- spring核心框架体系结构