Swift_学习笔记_自动引用计数
来源:互联网 发布:json转换为java对象 编辑:程序博客网 时间:2024/06/05 07:47
Swift
使用的自动引用技术ARC
(Automatic Reference Count
)这一机制来跟踪和管理程序的内存使用状况。Swift
的ARC
机制只是对于基于引用计数的对象采有效,对于基于值拷贝的,比如struct
、enum
是无效的。Swift
提供了两种方法解决循环强引用问题:弱引用(weak reference)
和无主引用(unowned reference
)。- 对于生命周期内会变为
nil
的实例使用弱引用。相反的,对于初始化赋值后再也不会被赋值为nil
的,使用无主引用。 - 弱引用(
weak
)- 弱引用必须声明为变量,表明其值在运行时可以被修改。
- 弱引用不能被声明为常量。
- 因为弱引用可以没有值,所以必须将每一个弱引用声明为可选类型。
无主引用(
unowned
)- 无主引用是永远有值的。
- 无主引用总是被定义为非可选类型。
- 可以在声明属性或者变量时,在前面加上关键字
unowned
,表示这是一个无主引用。 - 如果试图在实例被销毁后访问该实例的无主引用,会触发运行时错误。使用无主运用,必须确保无主引用始终指向一个未销毁的实例。
- 如果试图访问实例已经被销毁的无主引用,程序会直接崩溃。而不会发生无法预期的行为。因此,应避免这样的事情发生。
两个类的属性值都允许为
nil
,并且会潜在产生循环强引用,适用于weak
。- 两个类的其中一个属性值允许为
nil
,而另外一个属性的值不允许为nil
,并且会潜在产生循环强引用,适用于unowned
。 - 如果两个属性值都必须有值,并且初始化之后不能为
nil
,在此种情况下,一个属性值需要使用unowned
修饰,另外一个属性值不能为nil
。这时候需要一个属性值用unowned
修饰,另一个属性值使用显示展开的可选属性。
- 闭包引起的循环强引用
- 在定义闭包的同时,定义占有列表作为闭包的一部分,用以解决闭包的循环强引用。
- 占有列表的每个元素都是由
weak
和unowned
关键字和实例的引用成对组成。每一对都在花括号中,通过逗号隔开。 - 占有列表放置在闭包参数列表和返回类型之前,代码示例:
class Clourse{ lazy var someClourse:(Int,String) -> String = { [unowned self] (index:Int,stringToProcess:String) ->String in // 闭包代码 return "wangsk" }}
- 如果闭包没有指定参数列表或者返回类型,则可以通过上下文盘算,可以将占有列表放在闭包开始的地方,跟着使用关键字:
in
。代码示例:
class Clourse2{ lazy var someClourse2:() -> String = { [unowned self] in // 闭包代码 return "wangsk2" }}
阅读全文
0 0
- Swift_学习笔记_自动引用计数
- Swift_学习笔记_基础知识
- Swift_学习笔记_类
- Swift_学习笔记_继承
- Swift_学习笔记_协议
- Swift_学习笔记_泛型
- Swift_学习笔记_字符串、数组、字典
- Swift_学习笔记_类型转换
- Swift_学习笔记_运算符重载
- Swift_学习笔记_闭包
- Swift_学习笔记_调用ObjectiveC方法
- swift学习笔记(七)自动引用计数
- swift学习笔记之自动引用计数
- Swift_学习笔记_控制语句和函数
- Swift_学习笔记_枚举和结构体
- Object C 自动引用计数ARC 学习笔记
- iOS-学习笔记-内存管理 (1)自动引用计数
- Swift学习之自动引用计数
- bzoj 3040: 最短路(road)(堆优化dijkstra)
- 递归二叉树的序列打印、非递归二叉树的序列打印
- UVA
- 反爬虫四个基本策略
- P1182 数列分段Section II
- Swift_学习笔记_自动引用计数
- git中local branch追踪remote branch http://www.cnblogs.com/freefish12/p/5819134.html
- Intellij idea配置scala开发环境
- 普元EOS Platform逻辑流拦截器中如何传参?
- 玲珑学院OJ 1129 喵哈哈村的战斗魔法师丶坏坏い月【暴力分块】
- 多益网络校招笔试题
- 非递归实现两个有序链表
- 命令行压缩工具7z.exe使用详解
- 操作系统的结构