Swift 日常笔记碎片知识
工作机制
- Swift和OC一样,采用自动引用计数来管理内容
- 当有一个强引用指向某一个对象时,该对象的引用计算会自动+1
- 当该强引用消失时,引用计数会自动-1
- 当引用计数为0时,该对象会被销毁
循环引用
- 在通常情况下,ARC是会自动帮助我们管理内存的
-
但是在开发中会经常出现循环引用问题,比如下面小故事
案例:
如果法师与法术赋值为nil时, 相当于2者都不存在都被释放了,尘归尘土归土.
*内存图
相互引用对方, 法师在搓变羊术时, 如果这时是强引用那么法术无法被释放,导致循环引用,把法术释放在自己身上.(初级法师的低级错误)
让法术弱引用
*weak和unowend
- 相同点:
1.如果是使用weak修饰的弱引用,如果指向的对象销毁,那么指针会自动指向了nil
2.如果使用unowend修饰的弱引用,如果指向的对象销毁,那么指向依然指向之前的内存地址(注意: 非常危险,很容易产生野指针错误/访问了僵尸对象)
因此被unowend修饰且相互引用的对象,是可以被释放, 但开发中不建议使用.